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.HostingBeispiel: 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
Auch in der Bibliothek
Testen in JavaScript (Node.js): Frameworks und Werkzeuge
Arbeiten mit ZIP/Archiven in C# (.NET): vollständige Anleitung
PDF-Erstellung in Go (Golang): Bibliotheken und Beispiele
WebSocket-Bibliotheken für Swift: Starscream und URLSessionWebSocketTask
Überwachung von Go-Anwendungen: Bibliotheken und Tools