Quartz.NET pour C# (.NET) : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Quartz.NET pour C# (.NET) : Guide complet de planification de tâches

Quartz.NET est une bibliothèque de planification de tâches open source puissante, flexible et largement utilisée pour les applications .NET. Elle permet aux développeurs de créer, gérer et exécuter des tâches en arrière-plan selon un calendrier défini. Que vous ayez besoin d'exécuter du code à une heure précise, à intervalles réguliers ou en réponse à un événement (comme les cron jobs sous Linux), Quartz.NET est le choix idéal. Cette bibliothèque est un portage du célèbre framework Java Quartz Scheduler.

Pourquoi en avez-vous besoin ? Dans le développement moderne, de nombreuses tâches ne doivent pas être exécutées de manière synchrone à la demande de l'utilisateur. Il peut s'agir d'envoyer des campagnes email, de nettoyer des fichiers temporaires, de synchroniser des données avec des API externes, de générer des rapports, de mettre à jour le cache, etc. Quartz.NET offre un mécanisme fiable et robuste pour exécuter ces tâches. Il prend en charge la persistance des états des jobs en base de données (JobStore), ce qui permet de survivre aux redémarrages de l'application, et supporte le clustering pour répartir la charge.

Contrairement à l'utilisation simple de System.Threading.Timer ou de BackgroundService, Quartz.NET propose une API riche pour gérer le cycle de vie des tâches, des déclencheurs complexes (quotidiens, hebdomadaires, expressions CRON), l'exécution parallèle, l'écoute d'événements et bien plus encore. Cela en fait la référence de facto pour la planification dans l'écosystème .NET.

Installation

Quartz.NET est distribué via NuGet. Pour l'installer, utilisez l'une des commandes suivantes dans la console du gestionnaire de packages :

# Installation du package principal
dotnet add package Quartz

# Si vous avez besoin du support de la configuration XML
dotnet add package Quartz.Plugins

# Pour une utilisation avec Dependency Injection (recommandé pour ASP.NET Core)
dotnet add package Quartz.Extensions.Hosting

Pour le .NET Framework classique (par exemple .NET 4.8), utilisez la console NuGet :

Install-Package Quartz

Démarrage rapide : Exemple minimal fonctionnel

Créons une simple application console qui affiche "Bonjour, Quartz !" toutes les 5 secondes.

using System;
using System.Threading.Tasks;
using Quartz;
using Quartz.Impl;

namespace QuartzQuickStart
{
    // 1. Création du Job (tâche)
    public class HelloJob : IJob
    {
        public async Task Execute(IJobExecutionContext context)
        {
            await Console.Out.WriteLineAsync($"Bonjour, Quartz ! Heure : {DateTime.Now:HH:mm:ss}");
        }
    }

    class Program
    {
        static async Task Main(string[] args)
        {
            // 2. Création de la fabrique du planificateur
            StdSchedulerFactory factory = new StdSchedulerFactory();

            // 3. Obtention du planificateur
            IScheduler scheduler = await factory.GetScheduler();

            // 4. Démarrage du planificateur
            await scheduler.Start();

            // 5. Définition de la tâche (Job)
            IJobDetail job = JobBuilder.Create()
                .WithIdentity("myJob", "group1")
                .Build();

            // 6. Définition du déclencheur (planning)
            ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity("myTrigger", "group1")
                .StartNow()
                .WithSimpleSchedule(x => x
                    .WithIntervalInSeconds(5)
                    .RepeatForever())
                .Build();

            // 7. Enregistrement de la tâche et du déclencheur dans le planificateur
            await scheduler.ScheduleJob(job, trigger);

            // 8. Attente pour que la console ne se ferme pas
            await Task.Delay(TimeSpan.FromSeconds(30));

            // 9. Arrêt du planificateur
            await scheduler.Shutdown();
        }
    }
}

Classes, méthodes et interfaces principales

Recommendations