我每天都使用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();