【问题标题】:How to prevent quartz job multiple running如何防止石英作业多次运行
【发布时间】:2015-04-23 08:12:51
【问题描述】:

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

【问题讨论】:

    标签: quartz.net


    【解决方案1】:

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

    所以,从你的工作来看:

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

    【讨论】:

      【解决方案2】:

      如何防止作业同时触发?

      Quartz.NET 2.x

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

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

      【讨论】:

        【解决方案3】:

        我想你正在寻找这个:

        myJobTrigger.MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing;  
        

        我没有尝试过,但似乎它与 DisallowConcurrentExecution 属性配合得很好

        Other StackOverflow Article describing this feature

        【讨论】:

          猜你喜欢
          • 2010-12-13
          • 2011-01-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多