有没有办法告诉Quartz.NET不要同时触发两个触发器?这意味着如果触发器A
和触发器B
具有完全相同的时间表,那么触发器B
会等待一段时间然后触发?
我在我的程序中看到,当我的作业从同一个文件读取并执行相同的.exe
文件时,这可能会导致问题。这导致了一个未被捕获的异常,我还没弄清楚。
我不确定Quartz.NET如何处理这个问题。但有没有办法延迟这样的触发器(即使只是几秒钟)?
答案 0 :(得分:1)
您可以使用DisallowConcurrentExecutionAttribute来完成工作。
[DisallowConcurrentExecutionAttribute]
class DisallowConcurrentJob : IJob
{
//Implementation goes here
}
它可以防止多个具有相同密钥的作业实例运行 在同一时间。
可以找到一个非常好的解释here。
<强>更新强>
如果您想确保触发器/作业始终运行,您可以使用misfire说明:
IJobDetail job1 = JobBuilder.Create<InheritedJob1>()
.WithIdentity("DisallowConcurrentJob", "MYGROUP")
.RequestRecovery(true)
.Build();
//Schedule this job to execute every second, a maximum of 5 times
ITrigger trigger1 = TriggerBuilder.Create()
.WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForTotalCount(5)
.WithMisfireHandlingInstructionFireNow())
.StartNow()
.WithIdentity("DisallowConcurrentJobTrigger", "MYGROUP")
.Build();
Scheduler.ScheduleJob(job1, trigger1);
<强> WithMisfireHandlingInstructionFireNow 强>
The job is executed immediately after the scheduler discovers misfire situation.