在Quartz.net中使用多个触发器调度作业
本文关键字:触发器 调度作业 Quartz net | 更新日期: 2023-09-27 18:03:11
我需要在2个不同的时间表上运行作业(上午和下午)。我知道如何在一个时间表上运行它,但不确定如何设置它,以便两个时间表触发此作业
var saferWatchJobDetail = JobBuilder.Create<SaferWatchProcessor>().Build();
var swtriggerMorning = TriggerBuilder.Create().WithCronSchedule("0 10 6 ? * MON-SUN *", cs => cs.InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"))).Build();
var swtriggerAfternoon = TriggerBuilder.Create().WithCronSchedule("0 10 13 ? * MON-FRI *", cs => cs.InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"))).Build();
this.scheduler.ScheduleJob(saferWatchJobDetail, swtriggerMorning);
根据文档,似乎我需要使用ScheduleJob
覆盖ISet<ITrigger>
,但我不确定2件事:
- 什么是实现
ISet
和我如何实例化这个对象? - 其他
replace
参数是什么?不知道该怎么用。"关键"是什么?从文档:
如果给定的任何作业或触发器已经存在(或多个)特别是,如果键不是唯一的),而replace参数是唯一的如果不设置为true,则会抛出异常。
granaCoder的回答对我来说根本不起作用。它不断抛出异常。不知道为什么。
如果你想使用triggerset,这对我来说很有效,你可以这样做:
var triggerSet = new Quartz.Collection.HashSet<ITrigger>();
var saferWatchJobDetail = JobBuilder.Create<SaferWatchProcessor>().Build();
var swtriggerMorning = TriggerBuilder.Create().WithCronSchedule("0 10 6 ? * MON-SUN *", cs => cs.InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"))).Build();
var swtriggerAfternoon = TriggerBuilder.Create().WithCronSchedule("0 10 13 ? * MON-FRI *", cs => cs.InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"))).Build();
triggerSet.Add(swtriggerMorning);
triggerSet.Add(swtriggerAfternoon);
this.scheduler.ScheduleJob(saferWatchJobDetail, triggerSet, true);