Quartz.net - 如果当前仍在运行,如何跳过下一个 CRON 执行

问题描述 投票:0回答:2

例如,我有一个任务,每1分钟运行一次,从8:00开始,它会在8:01、8:02、8:03等执行。但是当8:01执行时执行超过1分钟-- 例如 61 秒 -- 如何跳过 8:02 的下一次执行并等待 8:03?

我曾尝试使用

DisallowConcurrentExecution
属性,但它只是让下一次执行等待当前,并在当前完成时立即执行。

c# asp.net quartz.net
2个回答
0
投票

一种选择是创建一个锁定标志/文件或类似的东西,允许您指示任务何时开始运行和何时结束。然后,您可以删除

DisallowConcurrentExecution
,以便下一次迭代可以继续进行并触发,而无需等待第一个迭代。然后,您只需检查每次迭代的锁定标志,看看另一个实例是否仍在运行,如果过去的作业仍在运行,则只需退出而不做任何工作。执行完成后,您删除/禁用锁定标志/文件。


0
投票

您应该添加

WithMisfireHandlingInstructionNextWithRemainingCount

.WithSimpleSchedule(x => x
   .WithIntervalInSeconds(5)
   .RepeatForever()
   .WithMisfireHandlingInstructionNextWithRemainingCount())

或者如果是

CronSchedule
那么
WithMisfireHandlingInstructionDoNothing

并且您应该将调度程序的

MisfireThreshold
设置为小于1分钟的值(这是时间触发器可以“延迟”执行)

© www.soinside.com 2019 - 2024. All rights reserved.