我每天都使用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来做到这一点。

最佳答案

DailyTimeIntervalTriggerImpl仅支持repeatCount。


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


Cron表达式很漂亮,并且有许多tools可以帮助您实现所需的内容。

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

ITrigger trigger = TriggerBuilder.Create()
        .WithIdentity("trigger1")
        .StartAt(startTime)
        .WithSimpleSchedule(x => x.RepeatForever().WithIntervalInHours(24))
        .Build();

10-05 18:51