我有一台带有约50个重复工作的hangfire服务器。在this example中设置IIS上的Hangfire。 在startup.cs中将重复的作业添加到hangfire中,如下所示:
RecurringJob.AddOrUpdate(job.desctiprion,
() => job.startJob(),
job.cron,
TimeZoneInfo.Local);
我需要添加每分钟运行的新定期作业。但这项工作运行的时间很短。我的目标 - 提供同时只能完成这项工作的一个范例。
有什么解决方案?据我所知,需要像一个线程一样排队,但队列不支持线程设置。
答案 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
}