例如,我有一个任务,每1分钟运行一次,从8:00开始,它会在8:01、8:02、8:03等执行。但是当8:01执行时执行超过1分钟-- 例如 61 秒 -- 如何跳过 8:02 的下一次执行并等待 8:03?
我曾尝试使用
DisallowConcurrentExecution
属性,但它只是让下一次执行等待当前,并在当前完成时立即执行。
一种选择是创建一个锁定标志/文件或类似的东西,允许您指示任务何时开始运行和何时结束。然后,您可以删除
DisallowConcurrentExecution
,以便下一次迭代可以继续进行并触发,而无需等待第一个迭代。然后,您只需检查每次迭代的锁定标志,看看另一个实例是否仍在运行,如果过去的作业仍在运行,则只需退出而不做任何工作。执行完成后,您删除/禁用锁定标志/文件。
您应该添加
WithMisfireHandlingInstructionNextWithRemainingCount
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(5)
.RepeatForever()
.WithMisfireHandlingInstructionNextWithRemainingCount())
或者如果是
CronSchedule
那么 WithMisfireHandlingInstructionDoNothing
并且您应该将调度程序的
MisfireThreshold
设置为小于1分钟的值(这是时间触发器可以“延迟”执行)