views:

65

answers:

1

Hi,

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)

+1  A: 

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.

Vinzz