如何防止石英作业多次运行

时间:2015-04-23 08:12:51

标签: quartz.net

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

3 个答案:

答案 0 :(得分:2)

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

所以,从你的工作:

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);
        }
    }
}

答案 1 :(得分:1)

如何同时禁止作业?

Quartz.NET 2.x

实现IJob并使用[DisallowConcurrentExecution]属性装饰您的作业类。有关详细信息,请阅读DisallowConcurrentExecutionAttribute的API文档。

你可以在那里找到文档 enter link description here

答案 2 :(得分:0)

我认为你正在寻找这个:

myJobTrigger.MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing;  

我还没有尝试过,但似乎它与DisallowConcurrentExecution属性配合使用

Other StackOverflow Article describing this feature