我正在使用Quartz.NET并面临以下任务:
安排一个每10分钟被解雇的工作,并在每次出现前1分钟提醒。
你知道是否有可能设计一个触发器来做到这一点?
我想尽可能避免处理2个触发器(一个用于提醒,另一个用于工作)。
我会在提醒和工作中使用相同的IStatefulJob类,在JobDataMap中添加一个bool IsReminder
可能有一个cron命令要这样做,但我担心我对cron一无所知......
编辑:我只是想补充说2触发器解决方案运行得很好,所以这只是为了获得更简洁的代码(在我的调度程序中减少一半的工作)
答案 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方法中为任务创建作业。