我的目标是让Quartz.NET以25Hz或40ms的速度执行工作。
我正在使用以下触发器:
ITrigger MyTrigger = TriggerBuilder.Create().WithIdentity("T1").ForJob("MyJob").WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromMilliseconds(40)).RepeatForever()).Build();
以及以下工作:
[DisallowConcurrentExecution]
private class MyJob : Quartz.IJob
{
public void Execute(IJobExecutionContext context)
{
Idx++;
Console.WriteLine("Job {0} fired at {1}ms", Idx, MyStopWatch.ElapsedMilliseconds);
}
}
问题是前150次执行还是太快了。例如,前60次迭代全部在秒表上以20ms或21ms发射。之后,它们每隔200毫秒发射一次,直到它在1000毫秒左右稳定,然后按照预期每隔40-42毫秒开始射击。
如果上一个作业在40ms内被解雇,我如何阻止Quartz触发作业?
这种行为的来源是什么?
答案 0 :(得分:2)
您不应该依赖Quartz进行毫秒精度调度。 Quartz有很多基础设施(失火检查,补偿等),这使得它不适合这种精度。
我认为在裸机虚拟机级别上稳定启动也可能是一个挑战,因为GC等可能会暂停一些事情。
Quartz可以为你做很多事情,但在这种情况下,如果这些是你的要求,我会选择自定义Thread或Timer。