如何同时只运行一项工作?

sin*_*asy 5 c# hangfire

我有一个具有约50个重复工作的hangfire服务器.在此示例中,在IIS上设置Hangfire .在startup.cs中将重复的作业添加到hangfire中,如下所示:

RecurringJob.AddOrUpdate(job.desctiprion,
            () => job.startJob(), 
            job.cron, 
            TimeZoneInfo.Local);
Run Code Online (Sandbox Code Playgroud)

我需要添加每分钟运行的新定期作业.但这项工作运行的时间很短.我的目标 - 提供同时只工作这个工作的一个范例.

有什么解决方案?据我所知需要像一个线程的队列,但队列不支持线程设置.

Yog*_*ogi 9

您可以使用DisableConcurrentExecution过滤器来防止并发执行.

[DisableConcurrentExecution(timeoutInSeconds: 60)]
public void SomeJob()
{
  //method body
}
Run Code Online (Sandbox Code Playgroud)

此过滤器在方法性能的开头放置分布式锁,并在使用该IServerFilter接口完成后将其释放 .类型和方法名称用作锁定资源.每个存储都使用自己的分布式锁实现.(在这里阅读更多)

  • 谢谢,你回答非常有帮助.也可以使用[AutomaticRetry(Attempts = 0)]来避免重试中的大作业数. (3认同)