Hangfire仅运行一次后台作业

4

我有一个运行中的Hangfire服务器。 我创建了如下的后台作业:

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

这个任务应该只运行一次,但在网站处理作业部分中,我看到它同时运行多次。我该如何防止这种情况并确保任务只被启动一次?


你是否在BackgroundJob.Enqueue上设置了断点以查看它是否被多次调用?那行代码在哪里? - Tom
这是使调用成为“fire and forget”的正确语法。它应该只运行一次。Execute方法是做什么的? - Thorarins
1
我正在Azure网站上运行此代码。该代码仅在启动时运行一次。也许它会在应用程序池经常回收时添加另一个作业。有没有办法检查作业是否已经排队或正在运行,以防止进一步排队? - Jules
2个回答

4
每次你发起调用,就会向数据库中添加另一个作业。如果你在启动时进行此操作并且应用程序经常重新启动,则会导致你报告的行为。你可以在方法调用上使用属性 DisableConcurrentExecution ,或者你可以通过 Hangfire.RecurringJob.AddOrUpdate 将作业输入到数据库中作为定时重复作业,而不是 BackgroundJob.Enqueue

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

我希望这可以帮助您。

请问您能否添加更多细节说明为什么这样做可以解决问题? - Adrian Sanguineti
当多个线程同时访问该方法时,该方法可能会被调用多次! - Andy
您可以参考以下链接:http://docs.hangfire.io/en/latest/background-processing/configuring-degree-of-parallelism.html。 - Andy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接