我想要实现的目标:我有一个每 5 秒触发一次的触发器和有状态的工作,有时需要超过 5 秒(例如 7 秒)和我现在所拥有的
start: 00:00:00
end : 00:00:07
start: 00:00:07 < right after previous has finished
我想要的是 :
start: 00:00:00
it should run at 00:00:05 but it hasn't
end : 00:00:07
start: 00:00:10 (5 seconds after previous, successive or not)
我已经尝试过quartz.net 2 和1 版。
工作:
[PersistJobDataAfterExecution]
[DisallowConcurrentExecution]
public class StatefulJob : IJob (or IStatefulJob in 1.x version)
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("StateFull START " + DateTime.Now.ToString());
Thread.Sleep(7000);
Console.WriteLine("StateFull END " + DateTime.Now.ToString());
}
}
扳机:
var trigger1 = TriggerBuilder
.Create()
.WithSimpleSchedule(x =>
x.WithIntervalInSeconds(timeout)
.RepeatForever()
.Build();
编辑
我尝试使用WithMisfireHandlingInstructionIgnoreMisfires()
,但是由于调度程序被关闭,或者因为没有可用的线程而发生了失败,在我的情况下 - 作业没有执行,因为我使用了 StatefulJob。也许我错了,但行为保持不变。
EDIT2 好的,带有“运行”标志的解决方案在单线程应用程序中完美运行。但是,如果我在几个线程(使用不同的参数)中运行这项工作,它将无法正常工作那么,是否可以使用石英实现我想要的行为?