我的域模型中有以下配置设置用于我的计划任务,我正在尝试使用Quartz.NET 2.3.3创建触发器.
TimeSpanTimeSpanTimeSpanDayOfWeek[]我可以使用此信息成功创建每日时间间隔触发器.
var trigger = TriggerBuilder
.Create()
.WithDailyTimeIntervalSchedule(c => c
.StartingDailyAt(scheduledTask.StartTime.ToTimeOfDay())
.EndingDailyAt(scheduledTask.EndTime?.ToTimeOfDay())
.OnDaysOfTheWeek(scheduledTask.WeekdaysEnabled.ToDaysOfWeek().ToArray())
.WithIntervalInSeconds((int)scheduledTask.RepeatInterval.TotalSeconds)
.InTimeZone(timeZoneInfo))
.Build();
Run Code Online (Sandbox Code Playgroud)
但是,我配置的EndTime可能在 StartTime 之前.例如,22:30到04:00(从第二天晚上10:30到第二天凌晨4:00,以指定的间隔重复,跨过午夜边界).每日时间间隔时间表似乎不支持这一点.它只会在开始时触发一次,而不会再触发一次.
我试过用过 CronTrigger,因为这可以在午夜边界工作,但是这不能正常支持一天的开始/结束时间(例如,0 30-0/30 22-4 ? * *从晚上10:00到凌晨4:30每隔30分钟运行一次).
有没有办法在Quartz.NET中创建这个计划?
通过创建两个每日时间间隔触发器,我能够解决这个问题.一个触发器的开始时间为晚上10:30,没有结束时间(一直运行到一天结束).另一个触发器没有开始时间,但结束时间为凌晨4:00.
使用这两个触发器调度作业会产生所需的触发时间.
1/01/2015 10:30:00 PM
1/01/2015 11:00:00 PM
1/01/2015 11:30:00 PM
2/01/2015 12:00:00 AM
2/01/2015 12:30:00 AM
2/01/2015 1:00:00 AM
2/01/2015 1:30:00 AM
2/01/2015 2:00:00 AM
2/01/2015 2:30:00 AM
2/01/2015 3:00:00 AM
2/01/2015 3:30:00 AM
2/01/2015 4:00:00 AM
2/01/2015 10:30:00 PM
2/01/2015 11:00:00 PM
2/01/2015 11:30:00 PM
3/01/2015 12:00:00 AM
3/01/2015 12:30:00 AM
3/01/2015 1:00:00 AM
3/01/2015 1:30:00 AM
3/01/2015 2:00:00 AM
3/01/2015 2:30:00 AM
3/01/2015 3:00:00 AM
3/01/2015 3:30:00 AM
3/01/2015 4:00:00 AM
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1088 次 |
| 最近记录: |