Aufgabenplaner in C# (.NET): Quartz.NET, Hangfire und Coravel

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Aufgabenplaner in C# (.NET): Quartz.NET, Hangfire und Coravel



In modernen .NET-Anwendungen ist es oft erforderlich, Code nicht nur auf Benutzeranfrage, sondern auch zeitgesteuert auszuführen: Versand von E-Mail-Newslettern, Datenbankbereinigung, Berichtserstellung, Synchronisation mit externen APIs. Hierfür werden Aufgabenplaner (Job Scheduler) verwendet. In diesem Artikel betrachten wir drei beliebte Werkzeuge für C# (.NET): Quartz.NET, Hangfire und Coravel, ihre Besonderheiten, Codebeispiele und Anwendungsszenarien.



Warum braucht man einen Aufgabenplaner in .NET?

Ein Aufgabenplaner ermöglicht:

  • Ausführung von Hintergrundaufgaben zu einer bestimmten Zeit (z. B. täglich um 8:00 Uhr).
  • Wiederholung von Aufgaben in einem festgelegten Intervall (alle 5 Minuten).
  • Verarbeitung von Aufgabenwarteschlangen, ohne den Hauptthread der Anwendung zu blockieren.
  • Einfache Verwaltung von Aufgaben (Hinzufügen, Entfernen, Anhalten).
  • Fehlertoleranz (Wiederholungsversuche bei Fehlern).


1. Quartz.NET — leistungsstark und flexibel

Quartz.NET ist ein Port des beliebten Java-Frameworks Quartz für .NET. Es unterstützt komplexe Zeitpläne (Cron-Ausdrücke), Clustering und Persistenz von Aufgaben in der Datenbank. Geeignet für Enterprise-Projekte.



Installation

dotnet add package Quartzdotnet add package Quartz.Extensions.Hosting


Beispiel: Aufgabe mit Cron-Zeitplan

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

public class EmailJob : IJob{ public async Task Execute(IJobExecutionContext context) { Console.WriteLine($"E-Mail-Versand um {DateTime.Now}"); // Logik zum Senden der E-Mail await Task.CompletedTask; }}

// Konfiguration in 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 * * ?") // Täglich um 8:00 Uhr .Build();

await scheduler.ScheduleJob(job, trigger);


Besonderheiten

  • Unterstützung von Cron-Ausdrücken (flexible Zeitplanung).
  • Clustering für verteilte Systeme.
  • Persistenz (Aufgaben bleiben nach Neustart erhalten).
  • Hohe Leistung für tausende Aufgaben.


2. Hangfire — Einfachheit und integrierte Benutzeroberfläche

Hangfire ist ein Aufgabenplaner mit minimaler Konfiguration und einem integrierten Web-Dashboard zur Aufgabenüberwachung. Ideal für kleine und mittlere Projekte, bei denen eine schnelle Integration wichtig ist.



Installation

dotnet add package Hangfiredotnet add package Hangfire.SqlServer (für Speicherung in der DB)


Beispiel: Einfache Aufgabe mit Verzögerung und Wiederholung

using Hangfire;using Hangfire.SqlServer;

// Konfiguration in Program.csGlobalConfiguration.Configuration .UseSqlServerStorage("YourConnectionString");

app.UseHangfireServer();app.UseHangfireDashboard(); // Zugriff unter /hangfire

// Aufgabe erstellenBackgroundJob.Schedule(() => Console.WriteLine("Verzögerte Aufgabe"), TimeSpan.FromMinutes(5));RecurringJob.AddOrUpdate("daily-report", () => Console.WriteLine("Täglicher Bericht"), Cron.Daily);


Besonderheiten

  • Integrierte Weboberfläche zur Überwachung (ohne zusätzliche Abhängigkeiten).
  • Unterstützung von Warteschlangen, Wiederholungsversuchen und verzögerten Aufgaben.
  • Einfache Integration mit ASP.NET Core.
  • Speicherung von Aufgaben in SQL Server, Redis, PostgreSQL.


3. Coravel — leichtgewichtig und modern

Coravel ist ein minimalistischer Aufgabenplaner für .NET, inspiriert von Laravel. Benötigt keine externen Abhängigkeiten

Empfehlungen