Schedule multiple vacancies at Quartz.Net

I am starting at Quartz.Net. How to add multiple tasks to the scheduler?

For training, I use a console application.

+8
source share
3 answers

If you are new to Quartz.Net, I suggest you start with the Jay Vilalta Blog and the old one , where you will find many tutorials and useful information about Quartz.Net.

If you want to schedule several tasks in a console application, you can simply call Scheduler.ScheduleJob ( IScheduler ), passing the task and the trigger that you previously created:

 IJobDetail firstJob = JobBuilder.Create<FirstJob>() .WithIdentity("firstJob") .Build(); ITrigger firstTrigger = TriggerBuilder.Create() .WithIdentity("firstTrigger") .StartNow() .WithCronSchedule("0 * 8-22 * * ?") .Build(); IJobDetail secondJob = JobBuilder.Create<SecondJob>() .WithIdentity("secondJob") .Build(); ITrigger secondTrigger = TriggerBuilder.Create() .WithIdentity("secondTrigger") .StartNow() .WithCronSchedule("0 0/2 * 1/1 * ? *") .Build(); Scheduler.ScheduleJob(firstJob, firstTrigger); Scheduler.ScheduleJob(secondJob, secondTrigger); 

You can download a working example here .

UPDATE:

If you want to pause and / or restart a task, you can use PauseJob and ResumeJob (you can do the same for a trigger with PauseTrigger and ResumeTrigger ).

This is an example:

 private static void Test001(IScheduler Scheduler) { IJobDetail firstJob = JobBuilder.Create<FirstJob>() .WithIdentity("firstJob") .Build(); ITrigger firstTrigger = TriggerBuilder.Create() .WithIdentity("firstTrigger") .StartNow() .WithSimpleSchedule(x => x.WithIntervalInSeconds(1).RepeatForever()) .Build(); IJobDetail secondJob = JobBuilder.Create<SecondJob>() .WithIdentity("secondJob") .Build(); ITrigger secondTrigger = TriggerBuilder.Create() .WithIdentity("secondTrigger") .StartNow() .WithSimpleSchedule(x=>x.WithIntervalInSeconds(1).RepeatForever()) .Build(); Scheduler.ScheduleJob(firstJob, firstTrigger); Scheduler.ScheduleJob(secondJob, secondTrigger); for (int i = 0; i < 300; i++) { System.Threading.Thread.Sleep(100); if (i == 100) { Scheduler.PauseJob(new JobKey("firstJob")); } else if (i == 200) { Scheduler.ResumeJob(new JobKey("firstJob")); } } } 
+9
source share

I am using this solution:

 IJobDetail jobDetail = JobBuilder .Create<ReportJob>() .WithIdentity("theJob") .Build(); ITrigger everydayTrigger = TriggerBuilder .Create() .WithIdentity("everydayTrigger") // fires .WithCronSchedule("0 0 12 1/1 * ?") // start immediately .StartAt(DateBuilder.DateOf(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year)) .Build(); ITrigger yearlyTrigger = TriggerBuilder.Create() .WithIdentity("yearlyTrigger") // fires .WithCronSchedule("0 0 12 1 1 ? *") // start immediately .StartAt(DateBuilder.DateOf(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year)) .Build(); var dictionary = new Dictionary<IJobDetail, Quartz.Collection.ISet<ITrigger>>(); dictionary.Add(jobDetail, new Quartz.Collection.HashSet<ITrigger>() { everydayTrigger, yearlyTrigger }); sched.ScheduleJobs(dictionary, true); 

from: stack overflow

+6
source share

What you want to accomplish is very simple:

 ISchedulerFactory schFactory = new StdSchedulerFactory(); IScheduler sch = schFactory.GetScheduler(); sch.Start(); //Repeat the code below for as many jobs you'd like //creating jobs and triggers for them. //If they fire at the same time, just one ITrigger is needed ..... IJobDetail job = JobBuilder.Create<HelloJob>() .WithIdentity("myJob", null) .Build(); ITrigger trigger = TriggerBuilder .Create() .WithSchedule(SimpleScheduleBuilder.RepeatMinutelyForever()) .ForJob(job) .WithIdentity(job.Key.Name + "Trigger") .Build(); sch.AddJob(trigger); 
+1
source share

All Articles