Planificateur de tâches en C# (.NET) : Quartz.NET, Hangfire et Coravel

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

Planificateur de tâches en C# (.NET) : Quartz.NET, Hangfire et Coravel



Dans les applications .NET modernes, il est souvent nécessaire d'exécuter du code non seulement à la demande de l'utilisateur, mais aussi selon un planning : envoi de campagnes email, nettoyage de base de données, génération de rapports, synchronisation avec des API externes. Pour cela, on utilise des planificateurs de tâches (Job Schedulers). Dans cet article, nous examinons trois outils populaires pour C# (.NET) : Quartz.NET, Hangfire et Coravel, leurs caractéristiques, des exemples de code et des scénarios d'utilisation.



Pourquoi un planificateur de tâches dans .NET ?

Un planificateur de tâches permet :

  • D'exécuter des tâches d'arrière-plan à un moment précis (par exemple, tous les jours à 8h00).
  • De répéter des tâches à un intervalle défini (toutes les 5 minutes).
  • De traiter des files d'attente de tâches sans bloquer le thread principal de l'application.
  • De gérer facilement les tâches (ajouter, supprimer, suspendre).
  • D'assurer la tolérance aux pannes (nouvelles tentatives en cas d'erreurs).


1. Quartz.NET — un planificateur puissant et flexible

Quartz.NET est un portage du framework Java populaire Quartz pour .NET. Il prend en charge les plannings complexes (expressions cron), le clustering, la persistance des tâches en base de données. Il convient aux projets d'entreprise.



Installation

dotnet add package Quartzdotnet add package Quartz.Extensions.Hosting


Exemple : tâche avec un planning cron

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

public class EmailJob : IJob{ public async Task Execute(IJobExecutionContext context) { Console.WriteLine($"Envoi d'email à {DateTime.Now}"); // Logique d'envoi du message await Task.CompletedTask; }}

// Configuration dans Program.csvar scheduler = await StdSchedulerFactory.GetDefaultScheduler();await scheduler.Start();

var job = JobBuilder.Create<EmailJob>() .WithIdentity("emailJob", "group1") .Build();

var trigger = TriggerBuilder.Create() .WithIdentity("emailTrigger", "group1") .WithCronSchedule("0 0 8 * * ?") // Tous les jours à 8h00 .Build();

await scheduler.ScheduleJob(job, trigger);


Caractéristiques

  • Prise en charge des expressions cron (planning flexible).
  • Clustering pour les systèmes distribués.
  • Persistance (les tâches sont conservées lors du redémarrage).
  • Haute performance pour des milliers de tâches.


2. Hangfire — simplicité et interface utilisateur intégrée

Hangfire est un planificateur avec une configuration minimale et un panneau web intégré pour la surveillance des tâches. Idéal pour les projets de petite et moyenne envergure où une intégration rapide est importante.



Installation

dotnet add package Hangfiredotnet add package Hangfire.SqlServer (pour le stockage en base de données)


Exemple : tâche simple avec délai et répétition

using Hangfire;using Hangfire.SqlServer;

// Configuration dans Program.csGlobalConfiguration.Configuration .UseSqlServerStorage("YourConnectionString");

app.UseHangfireServer();app.UseHangfireDashboard(); // Accès à /hangfire

// Création de tâcheBackgroundJob.Schedule(() => Console.WriteLine("Tâche différée"), TimeSpan.FromMinutes(5));RecurringJob.AddOrUpdate("daily-report", () => Console.WriteLine("Rapport quotidien"), Cron.Daily);


Caractéristiques

  • Interface web intégrée pour la surveillance (sans dépendances supplémentaires).
  • Prise en charge des files d'attente, des nouvelles tentatives et des tâches différées.
  • S'intègre facilement avec ASP.NET Core.
  • Stockage des tâches dans SQL Server, Redis, PostgreSQL.


3. Coravel — léger et moderne

Coravel est un planificateur minimaliste pour .NET, inspiré de Laravel. Ne nécessite pas de dépendances externes

Recommendations