在Quartz.net中安排具有多个触发器的作业

时间:2016-08-18 16:26:57

标签: c# quartz.net

我需要按照两种不同的时间表(早上和下午)开展工作。我知道如何在一个时间表上运行它,但不知道如何设置它以便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>,但我不确定两件事:

  1. 实施ISet的内容是什么以及如何实例化此对象?
  2. 其他参数replace是什么?不知道我该怎么用它。什么是&#34;关键&#34;?来自文档:
  3.   

    如果已存在任何给定的作业或触发器(或更多)   具体来说,如果键不唯一)并且替换参数是   如果没有设置为true,则会抛出异常。

1 个答案:

答案 0 :(得分:2)

格拉纳科德的回答对我来说根本不起作用。它不断抛出异常。不知道为什么。

如果你想使用最终为我工作的触发器,你就是这样做的:

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