Quartz.net的日常工作每分钟都在执行

时间:2013-10-28 15:24:40

标签: scheduling quartz.net atlas

我有以下代码。如果未设置配置设置,我希望它每天在17:00运行,否则将使用配置设置。到目前为止没有问题,变量设置正确。但是:不是每天都要每分钟执行一次工作,而我无法弄清楚原因。调度程序没有正确设置吗?

        TimeSpan timeOfExecution;

        if (!TimeSpan.TryParse(ConfigurationManager.AppSettings["TimeOfExecution"], out timeOfExecution))
        {
            timeOfExecution = new TimeSpan(17, 0, 0);

        }

       var job = JobBuilder.Create<DailyReportJob>()
            .WithIdentity("DailyReportJob")
            .Build();

        var trigger = TriggerBuilder.Create()
            .WithIdentity("DailyReportTrigger")
            .WithDailyTimeIntervalSchedule(s => s.OnEveryDay().StartingDailyAt(new TimeOfDay(timeOfExecution.Hours, timeOfExecution.Minutes)))
            .Build();

        Scheduler.ScheduleJob(job, trigger);
        Scheduler.ListenerManager.AddJobListener(AutofacJobListener);
        Scheduler.Start();

1 个答案:

答案 0 :(得分:2)

此触发器的默认时间是每分钟,因为您没有另外指定。

您可以使用以下代码检查所有间隔:

var dt = trigger.GetNextFireTimeUtc();

for (int i = 0; i < 10; i++)
{
    if (dt == null)
        break;

    Console.WriteLine(dt.Value.ToLocalTime());
    dt = trigger.GetFireTimeAfter(dt);
}

如果您希望排定作业时运行一次,下午5点,每天,你可以改变你的代码将在24小时的时间间隔:

var trigger = TriggerBuilder.Create()
    .WithIdentity("DailyReportTrigger")
    .WithDailyTimeIntervalSchedule(s => s.OnEveryDay().StartingDailyAt(new TimeOfDay(timeOfExecution.Hours, timeOfExecution.Minutes)))
    .WithIntervalInHours(24)
    .Build();