我有一个hangfire服务器正在运行。 我创建了一个后台作业如下Hangfire只运行后台作业一次
BackgroundJob.Enqueue(() => new MyJob().Execute(path));
这个工作应该只运行一次,但在门户网站我看到了同时运行多个倍的处理工作的一部分。我如何防止这种情况发生,并确保工作只有一次被启动?
我有一个hangfire服务器正在运行。 我创建了一个后台作业如下Hangfire只运行后台作业一次
BackgroundJob.Enqueue(() => new MyJob().Execute(path));
这个工作应该只运行一次,但在门户网站我看到了同时运行多个倍的处理工作的一部分。我如何防止这种情况发生,并确保工作只有一次被启动?
每次您打电话时,都会向数据库添加另一项工作。如果您在启动时遇到这种情况,并且您的应用程序频繁重新启动,则会导致您要报告的行为。你可以通过的Hangfire.RecurringJob.AddOrUpdate
代替BackgroundJob.Enqueue
你的方法调用中使用属性
DisableConcurrentExecution
,或者你可以进入jobinto数据库为定时循环作业有你把一个断点在BackgroundJob.Enqueue上看看它是否被多次调用?那行代码在哪里? – Tom这是正确的语法,使火灾和忘记呼叫。应该运行一次。 Execute方法做什么? – Thorarins
我在Azure网站上运行这个。代码在启动时只运行一次。如果应用池回收,似乎经常会发生,也许它会增加另一项工作。有没有办法可以检查一份工作是否已经排队或跑步,以防止进一步排队? – Jules