2015-09-15 114 views
3

我有一个hangfire服务器正在运行。 我创建了一个后台作业如下Hangfire只运行后台作业一次

BackgroundJob.Enqueue(() => new MyJob().Execute(path)); 

这个工作应该只运行一次,但在门户网站我看到了同时运行多个倍的处理工作的一部分。我如何防止这种情况发生,并确保工作只有一次被启动?

+0

你的方法调用中使用属性DisableConcurrentExecution,或者你可以进入jobinto数据库为定时循环作业有你把一个断点在BackgroundJob.Enqueue上看看它是否被多次调用?那行代码在哪里? – Tom

+0

这是正确的语法,使火灾和忘记呼叫。应该运行一次。 Execute方法做什么? – Thorarins

+1

我在Azure网站上运行这个。代码在启动时只运行一次。如果应用池回收,似乎经常会发生,也许它会增加另一项工作。有没有办法可以检查一份工作是否已经排队或跑步,以防止进一步排队? – Jules

回答

4

每次您打电话时,都会向数据库添加另一项工作。如果您在启动时遇到这种情况,并且您的应用程序频繁重新启动,则会导致您要报告的行为。你可以通过的Hangfire.RecurringJob.AddOrUpdate代替BackgroundJob.Enqueue

0
var options = new BackgroundJobServerOptions { WorkerCount =1 }; 
      app.UseHangfireServer(options); 

我希望这将有助于你

+0

请问您可以添加更多的细节,为什么这将解决问题? – Adrian

+0

当多个线程同时访问该方法时,该方法可能会多次调用! – Andy

+0

你可以参考这个:http://docs.hangfire.io/en/latest/background-processing/configuring-degree-of-parallelism.html – Andy