How to handle a recurrent job with a reminder in Quartz.NET
-
20-09-2019 - |
Question
I'm using Quartz.NET and am facing the following task:
Schedule a job to be fired every 10 minutes, with a reminder 1 minute before each occurrence.
Do you know if it's possible to design a trigger to do that?
I'd like to avoid if possible to handle 2 triggers (one for the reminders and one shifted for the jobs).
I'll use the same IStatefulJob class for the reminder and the job, adding a bool IsReminder in the JobDataMap
There might be a cron comand to do that, but I'm afraid I don't know anything at cron...
Edit: I just wanted to add that the 2 triggers solution works quite well, so this is just about getting a more concise code (and half less jobs in my scheduler)
Solution
For the record, I'll answer my own question.
One solution is to use two shifted triggers, with a time shit equal to the reminder time you want to set:
//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));
You can now attach these triggers to two jobs.
Another solution consists in setting a trigger for the reminder only, and to create a job for the task within the trigger Execute method.