4

我每天在特定时间使用 Quartz.NET 执行一项任务,这是我的代码:

public class TestSchedule : ISchedule
    {
        public void Run()
        {

            DateTimeOffset startTime = DateBuilder.FutureDate(2, IntervalUnit.Second);

            IJobDetail job = JobBuilder.Create<HelloJob>()
                                       .WithIdentity("job1")
                                       .Build();

            ITrigger trigger = TriggerBuilder.Create()
                                             .WithIdentity("trigger1")
                                             .StartAt(startTime)
                                             .WithDailyTimeIntervalSchedule(x => x.OnEveryDay().StartingDailyAt(new TimeOfDay(7, 0)).WithRepeatCount(0))
                                             .Build();

            ISchedulerFactory sf = new StdSchedulerFactory();
            IScheduler sc = sf.GetScheduler();
            sc.ScheduleJob(job, trigger);

            sc.Start();
        }
    }

我的代码正在运行,但问题是它只能运行一次(似乎,这是因为WithRepeatCount(0))现在,怎么能说每天 7 点运行?
PS:我不想用CronTrigger这样做。

4

1 回答 1

7

DailyTimeIntervalTriggerImpl仅支持repeatCount

此触发器还支持“repeatCount”功能,以在达到一定数量的计数后结束触发器触发时间。就像 SimpleTrigger 一样,设置 repeatCount=0 意味着触发器只会触发一次!设置任何正计数,触发器将重复计数 + 1 次。与 SimpleTrigger 不同,此触发器的 repeatCount 的默认值设置为 REPEAT_INDEFINITELY 而不是 0。

Cron 表达式很漂亮,并且有很多工具可以帮助你实现你想要的。

另一种选择是使用SimpleTriggerImpl并每 24 小时设置一次间隔:

ITrigger trigger = TriggerBuilder.Create()
        .WithIdentity("trigger1")
        .StartAt(startTime)
        .WithSimpleSchedule(x => x.RepeatForever().WithIntervalInHours(24))
        .Build();
于 2013-06-25T11:09:35.310 回答