Getting all the active jobs from Quartz.NET scheduler

VJAI picture VJAI · Jul 11, 2011 · Viewed 9.1k times · Source

How I can get all the active jobs scheduled in the Quartz.NET scheduler? I tried the GetCurrentlyExecutingJobs() but it is returning always 0.

Answer

LeftyX picture LeftyX · Jul 11, 2011

That method doesn't seem to work.
The only solution I had found was to loop through all the jobs:

var groups = sched.JobGroupNames;
for (int i = 0; i < groups.Length; i++)
    {
        string[] names = sched.GetJobNames(groups[i]);
        for (int j = 0; j < names.Length; j++)
        {
             var currentJob = sched.GetJobDetail(names[j], groups[i]);
        }
    }

When a job is found it means that it is still active. If you set your job as durable, though, it will never be deleted if there are no associated trigger.
In that situation this code works better:

var groups = sched.JobGroupNames;
for (int i = 0; i < groups.Length; i++)
    {
        string[] names = sched.GetJobNames(groups[i]);
        for (int j = 0; j < names.Length; j++)
        {
            var currentJob = sched.GetJobDetail(names[j], groups[i]);
            if (sched.GetTriggersOfJob(names[j], groups[i]).Count() > 0)
            {
                // still scheduled.
            }
        }
    }

UPDATE:

I did some debugging to see what happens with GetCurrentlyExecutingJobs().
As a matter of fact it returns the job being executed but the elements are remove from the collection as soon as the job is executed.
You can check the 2 functions JobToBeExecuted and JobWasExecuted in the QuartzScheduler class.