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)

Was it helpful?

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top