1

我有下面的代码。如果未设置配置设置,我希望它每天在 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();
4

1 回答 1

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();
于 2013-10-28T19:19:45.907 回答