如何在Quartz.NET中使用提醒处理周期性作业

时间:2010-01-13 16:22:20

标签: .net quartz.net

我正在使用Quartz.NET并面临以下任务:

安排一个每10分钟被解雇的工作,并在每次出现前1分钟提醒。

你知道是否有可能设计一个触发器来做到这一点?

我想尽可能避免处理2个触发器(一个用于提醒,另一个用于工作)。

我会在提醒和工作中使用相同的IStatefulJob类,在JobDataMap中添加一个bool IsReminder

可能有一个cron命令要这样做,但我担心我对cron一无所知......

编辑:我只是想补充说2触发器解决方案运行得很好,所以这只是为了获得更简洁的代码(在我的调度程序中减少一半的工作)

1 个答案:

答案 0 :(得分:1)

为了记录,我会回答我自己的问题。

一种解决方案是使用两个移位的触发器,时间间隔等于您想要设置的提醒时间:

 //Let's set a recurrent task, starting 10 seconds from now, and firing every 20 seconds, with a 5 seconds reminder.
 DateTime startTime = DateTime.UtcNow.AddSeconds(10);

 SimpleTrigger remindertrigger = new SimpleTrigger("reminderTrigger",
              null,
              startTime.AddSeconds(-5), //Reminder time shift
              null,
              SimpleTrigger.RepeatIndefinitely,
              TimeSpan.FromSeconds(20));


SimpleTrigger strigger = new SimpleTrigger("taskTrigger",
              null,
              startTime,
              null,
              SimpleTrigger.RepeatIndefinitely,
              TimeSpan.FromSeconds(20));

您现在可以将这些触发器附加到两个作业中。

另一个解决方案包括仅为提醒设置触发器,以及在触发器Execute方法中为任务创建作业。