Scheduling With Quartz.Net

The other day I have a requirement to schedule something in my app to run at certain times, and at fixed intervals there after. Typically I would just solve this using either a simple Timer, or turn to my friend Reactive Extensions by way of Observable.Timer(..).

Thing is I decided to have a quick look at something I have always known about but never really used, for scheduling, which is, which actually does have some pretty good documentation up already:

For me I just wanted to get something very basic up and running, so I gave it a blast.

Step 1 : Install

This is as easy as installing the following NuGet package “Quartz

Step 2 Create A Job Class

This again is fairly easy thanks to Quartz nice API. Here is my job class

using System;
using Quartz;

namespace FooBar
    public class LoggingJob : IJob
        public void Execute(IJobExecutionContext context)

                string.Format("Logging job : {0} {1}, and proceeding to log", 
                    DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString()));


That is all you need for a job really. The context object gives you access to a lot of useful stuff.

Step 3 : Setting up a schedule

Again this was mega easy, all I had to do was something like this:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Common.Logging;

using Quartz;
using Quartz.Impl;

namespace FooBar
    class Program

        private static ILog Log = LogManager.GetCurrentClassLogger();

        static void Main(string[] args)
                // construct a scheduler factory
                ISchedulerFactory schedFact = new StdSchedulerFactory();

                // get a scheduler
                IScheduler sched = schedFact.GetScheduler();

                IJobDetail job = JobBuilder.Create<LoggingJob>()
                    .WithIdentity("myJob", "group1")

                ITrigger trigger = TriggerBuilder.Create()
                    (s =>
                            .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(10, 15))

                sched.ScheduleJob(job, trigger);
            catch (ArgumentException e)


And that was enough for my job to get scheduled, every 10 seconds starting at 10:15 AM.

I was fairly happy with Quartz, and I will certainly make more use of it, when I have bigger, bolder, badder scheduling needs.


6 thoughts on “Scheduling With Quartz.Net

  1. Isn’t there something missing in the code? There is no reference to LoggingJob in the part where you schedule the job; how do you tell it which job to run?

    • sachabarber says:

      Thomas, god knows how that happened, but yes you are completely correct. Have fixed that up now, cut and paste error, code was 100% correct, error was me I suspect

  2. Have you checked XecMe. I found it better than Quartz as it gives more flexibility in setting up jobs, scheduling as service, console application, inside an application or as Azure Worker role,

  3. LeftyX says:

    I’ve used Quartz.Net for more than 3 years and I’ve always been really happy with it.
    Recently I found Hangfire ( and switch to it.
    It’s far better and easier than Quartz.Net, plus it has a amazing admin panel.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: