如何同时只运行一个作业

本文关键字:一个 作业 何同时 运行 | 更新日期: 2023-09-27 17:58:04

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

RecurringJob.AddOrUpdate(job.desctiprion,
            () => job.startJob(), 
            job.cron, 
            TimeZoneInfo.Local);

我需要添加每分钟运行一次的新的定期作业。但这项工作运行时间延长的可能性很小。我的目标是提供同时工作的这项工作的一个例子。

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

如何同时只运行一个作业

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

[DisableConcurrentExecution(timeoutInSeconds: 60)]
public void SomeJob()
{
  //method body
}

此筛选器在方法的开头放置分布式锁性能,并在使用IServerFilter接口。类型和方法名称被用作锁定资源。每个存储都使用自己的分布式锁实施(点击此处阅读更多)

 var worker = new BackgroundWorker();
 worker.DoWork += worker_DoWork;
 worker.RunWorkerCompleted += worker_RunWorkerCompleted;
 private void worker_DoWork(object sender, DoWorkEventArgs e)
 {
        // do your task here
 }
 private void worker_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e)
 {
       //Do when completed 
 }