如何同时只运行一个作业
本文关键字:一个 作业 何同时 运行 | 更新日期: 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
}