public void TestJobInterruption() { // create a simple scheduler NameValueCollection config = new NameValueCollection(); config["quartz.scheduler.instanceName"] = "InterruptableJobTest_Scheduler"; config["quartz.scheduler.instanceId"] = "AUTO"; config["quartz.threadPool.threadCount"] = "2"; config["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool"; IScheduler sched = new StdSchedulerFactory(config).GetScheduler(); sched.Start(); // add a job with a trigger that will fire immediately IJobDetail job = JobBuilder.Create<TestInterruptableJob>() .WithIdentity("j1") .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity("t1") .ForJob(job) .StartNow() .Build(); sched.ScheduleJob(job, trigger); sync.WaitOne(); // make sure the job starts running... IList<IJobExecutionContext> executingJobs = sched.GetCurrentlyExecutingJobs(); Assert.AreEqual(1, executingJobs.Count, "Number of executing jobs should be 1 "); IJobExecutionContext jec = executingJobs[0]; bool interruptResult = sched.Interrupt(jec.FireInstanceId); sync.WaitOne(); // wait for the job to terminate Assert.IsTrue(interruptResult, "Expected successful result from interruption of job "); Assert.IsTrue(TestInterruptableJob.interrupted, "Expected interrupted flag to be set on job class "); sched.Clear(); sched.Shutdown(); }