如何防止 quartz job multiple 运行

How to prevent quartz job multiple running

我正在使用 quartz.net 2.3 作业标有 DisallowConcurrentExecution 属性。当一个作业由 TriggerJob 手动启动时,如果它已经在进行中,它不会启动,没关系。但是当上一次执行完成时,它会立即再次开始。 如果在作业进行时触发它,是否可以防止将来执行?

是的。您可以检索作业的所有触发器,将它们与正在执行的触发器进行比较,如果它们是在它之后安排的,则取消安排作业(触发器将被删除)。

因此,根据您的工作:

public void Execute(IJobExecutionContext context)
{
    var currentlyExecutingTrigger = context.Trigger;
    var currentlyExecutingJobkey = context.JobDetail.Key;

    var newTriggers = context.Scheduler.GetTriggersOfJob(key);

    //if trigger was scheduled after currently executing trigger
    foreach (var newTrigger in newTriggers)
    {
        if (newTrigger.StartTimeUtc >= trigger.StartTimeUtc)
        {
            //delete it
            context.Scheduler.UnscheduleJob(newTrigger.Key);
        }
    }
}

如何防止作业同时触发?

Quartz.NET 2.x

实施 IJob 并使用 [DisallowConcurrentExecution] 属性修饰您的作业 class。阅读 DisallowConcurrentExecutionAttribute 的 API 文档了解更多信息。

你可以在文档中找到它 enter link description here

我想你正在寻找这个:

myJobTrigger.MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing;  

我没试过,但它似乎与 DisallowConcurrentExecution 属性配合使用效果很好

Other Whosebug Article describing this feature