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

时间:2016-07-20 14:41:24

标签: c# hangfire

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

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

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

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

2 个答案:

答案 0 :(得分:7)

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

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

此过滤器在方法的开头放置分布式锁   性能并在使用完成后将其释放   IServerFilter界面。类型和方法名称用作a   锁定资源。每个存储使用自己的分布式锁   实现。 (read more here

答案 1 :(得分:-2)

 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 
 }