【问题标题】:Hangfire run background job only onceHangfire 只运行一次后台作业
【发布时间】:2021-07-23 21:21:00
【问题描述】:

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

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

该作业应该只运行一次,但在门户网站的处理作业部分,我看到它一次运行多次。如何防止这种情况并确保该作业只启动一次?

【问题讨论】:

  • 您是否在 BackgroundJob.Enqueue 上设置了断点以查看它是否被多次调用?那行代码在哪里?
  • 这是正确的语法,可以触发并忘记调用。那应该运行一次。 Execute 方法是做什么的?
  • 我在 Azure 网站上运行它。代码在启动时只运行一次。如果应用程序池似乎经常发生回收,那么它可能会增加另一项工作。有没有办法检查作业是否已经入队或正在运行,以防止进一步入队?

标签: c# .net hangfire


【解决方案1】:

每次调用时,它都会向数据库添加另一个作业。如果您在 Startup 中发生这种情况并且您的应用程序经常重新启动,那将导致您报告的行为。您可以在方法调用中使用属性DisableConcurrentExecution,或者您可以通过Hangfire.RecurringJob.AddOrUpdate 而不是BackgroundJob.Enqueue 将作业作为定时重复作业输入数据库

【讨论】:

    【解决方案2】:
       var options = new BackgroundJobServerOptions { WorkerCount =1 };
                app.UseHangfireServer(options);
    

    希望对你有帮助

    【讨论】:

    猜你喜欢
    • 2017-10-17
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2018-05-19
    • 2014-04-12
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多