What is exactly mean by 'DisallowConcurrentExecution' in Quartz.net

Ishtiaq picture Ishtiaq · Apr 30, 2014 · Viewed 11.1k times · Source

I have a Quartz.net Job with the following definition.

    [PersistJobDataAfterExecution]
    [DisallowConcurrentExecution]
    public class AdItemsJob : IJob, IInterruptableJob
    {

        public void Execute(IJobExecutionContext context)
        { 
         // Job execution logic,

        }
   }

As I have decorated the Job with DisallowConcurrentExecution attribute.
What I know about this attribute, we can't run multiple instances of same job at the same time. What is meant by multiple instances here.?
Does the two jobs of AddItemsJob with different key are called same instances or different instances.?
Does two jobs with different key can execute at the same time.?

Answer

Marko Lahma picture Marko Lahma · Apr 30, 2014

A job instance is a job with unique key. So having a job of type AddItemsJob can have two instances with keys AddItemsJob.Admin and AddItemsJobs.Legacy. The concurrency protection comes per job key - the aforementioned two jobs could run simultaneously if they were defined with overlapping triggers. Having a single job defined behind single key would not run simultaneously even if there were multiple triggers having overlapping schedules associated with it.