在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件事:

  1. 什么是实现ISet和我如何实例化这个对象?
  2. 其他replace参数是什么?不知道该怎么用。"关键"是什么?从文档:

如果给定的任何作业或触发器已经存在(或多个)特别是,如果键不是唯一的),而replace参数是唯一的如果不设置为true,则会抛出异常。

在Quartz.net中使用多个触发器调度作业

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);