【问题标题】:What happens in Quartz.NET/Quartz whenQuartz.NET/Quartz 中会发生什么
【发布时间】:2010-10-22 09:35:58
【问题描述】:

...当一个作业在下一个执行时间出现时仍在执行?

例如,如果我有一个工作每 30 秒发生一次,并且在 30 秒后它仍在运行,那么下一个实例会开始发挥作用还是会等待?

【问题讨论】:

  • 在您自己的安装中自己验证它不会花不到一分钟的时间吗?创建一个工作需要很长时间,甚至更容易,永远不会完成(例如等待用户输入);每 30 秒左右安排一次,瞧!你有你的答案。

标签: .net quartz-scheduler quartz.net


【解决方案1】:

简短的回答是将执行一个新作业,除非您从 IStatefulJob 继承,在这种情况下,一次只允许运行一个作业实例。

【讨论】:

    【解决方案2】:

    正如 TskTsk 回答的那样,您可以实现 IJob 的 IStatefulJob,但有一个问题!如果您的作业执行时间超过 30 秒(因此您有一个或多个作业在等待该作业完成),在其执行后,所有正在等待的作业都会立即触发!要克服这个问题,您需要创建实现 SimpleTrigger 的新类。这个新的触发器类应该已经覆盖了 GetFireTimeAfter。

    public class MyTrigger : SimpleTrigger
    {
    
        public MyTrigger(string name,
                         string group,
                         DateTime startTimeUtc,
                         DateTime? endTimeUtc,
                         int repeatCount,
                         TimeSpan repeatInterval) : base(name, startTimeUtc, endTimeUtc, repeatCount, repeatInterval)
        {
        }
    
        public override DateTime? GetFireTimeAfter(DateTime? afterTimeUtc)
        {
            return DateTime.UtcNow.AddSeconds(RepeatInterval.TotalSeconds);
        }
    
    }
    

    这样下一个作业不会在第一个作业完成后立即执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 2020-01-30
      • 2011-07-07
      相关资源
      最近更新 更多