如何防止石英作业立即启动

时间:2016-09-30 14:55:04

标签: quartz-scheduler quartz.net

我有一个.net Windows服务,它创建和安排石英作业,计划每4小时运行一次SUN-SAT从Windows服务启动当天凌晨4点开始。不幸的是,我启动Windows服务工作的那一刻就会在计划之前被触发,并且重复工作超过几次,之后它只按照计划工作。如何在启动Windows服务后立即阻止作业运行,并且只在预定时间运行。我使用crons调度程序。我使用Oracle DB维护我的工作时间表。

 ITrigger objESLJobTrigger = TriggerBuilder.Create()
                            .WithIdentity("Trigger-" + Key.ToString(), xxx.ToString())
                            .StartAt(DateTimeOffset.Parse(DateTime.Today.AddHours(4).ToString()).LocalDateTime)
                            .WithCronSchedule("0 0 0/4 ? * SUN-SAT", x => x.WithMisfireHandlingInstructionIgnoreMisfires())
                            .Build();

1 个答案:

答案 0 :(得分:2)

评论后更新: 是的,您需要使用StartAt方法,但是:

  • 如果服务在凌晨4点之前开始,您需要在StartAt使用今日日期,否则请使用明天日期:

    var startAtDateTime = DateTime.Today.AddHours(4);
    if (startAtDateTime < DateTime.UtcNow)
    {
       startAtDateTime = startAtDateTime.AddDays(1);
    }
    
    and then use .StartAt(new DateTimeOffset(startAtDateTime))
    
  • 注意StartAt预计UTC格式的时间,而不是本地时间,所以如果您需要在当地时区凌晨4点开始工作,请不要忘记时区偏移。

另外&#39; SUN-SAT&#39;意味着每天都可以将你的cron表达式简化为0 0 0/4 ? * *