Quartz.NET

Quartz.NET

Job scheduling framework for .NET

Description

A hand-rolled Timer loses every pending run the moment the process restarts. Handing the job to Windows Task Scheduler cuts it off from your application's logging, configuration and deployment. Scale to two instances and the same job fires twice. Quartz.NET pulls the whole thing back into your code — jobs and triggers are declared separately, the schedule lives in a database, and clustered instances compete for each fire so only one node runs it.

It is the .NET port of Java's Quartz, old enough that the API has stopped moving. A job is an ordinary class implementing IJob; a trigger decides when it fires — fixed interval, cron expression, or a bounded repeat count. If the process was down for a while, the fires it missed are replayed or skipped according to the misfire policy you set, rather than silently vanishing.

Features



Cron triggers: express "half past nine every weekday" as a cron expression instead of computing the next run time yourself.

Durable schedules: AdoJobStore persists jobs and triggers to SQL Server, PostgreSQL, MySQL or SQLite, so restarts keep the schedule and changing it needs no redeploy.

Clustering: instances pointed at the same store form a cluster automatically; each fire goes to exactly one node, and a node that dies has its work picked up by the others.

Misfire policies: decide per job whether a fire missed during downtime is run once immediately, replayed in full, or skipped to the next slot.

Host integration: dependency injection, generic host, health checks and System.Text.Json serialization all live in the core package, so one NuGet reference wires it into an existing ASP.NET Core app.