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

分享于2022年09月08日 asp.net c# quartz.net 问答
【问题标题】:Quartz.net - How to skip the next CRON execution if current is still runningQuartz.net - 如果当前仍在运行,如何跳过下一个 CRON 执行
【发布时间】:2022-08-02 01:31:18
【问题描述】:

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

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

    <1234563>
    看到quartz.net是Java库的一个端口(绑定?),我认为 this 的答案涵盖了它,所以基本上只使用 ScheduleBuilder 上的 WithMisfireHandlingInstructionNextWithRemainingCount 方法,你甚至可以看看C# source code for it
    <1234563>
    我搜索了 WithMisfireHandlingInstructionNextWithRemainingCount ,似乎只适用于 SimpleScheduleBuilder ,不适用于 CronScheduleBuilder

【解决方案1】:

一种选择是创建一个锁定标志/文件或类似的东西,允许您指示任务何时开始运行以及何时结束。然后,您可以删除 DisallowConcurrentExecution ,以便下一次迭代可以继续并触发,而无需等待第一次。然后,您只需在每次迭代时检查锁定标志以查看另一个实例是否仍在运行,如果过去的作业仍在运行,则直接退出而不做任何工作。执行完成后,您删除/禁用锁定标志/文件。

【讨论】: