Aufgabenplaner in C# (.NET): Übersicht und Beispiele
In der modernen Entwicklung mit C# (.NET) besteht häufig die Notwendigkeit, Code nach einem Zeitplan auszuführen: E-Mail-Newsletter versenden, Cache aktualisieren, Logs archivieren oder ETL-Prozesse starten. Dafür gibt es spezialisierte Bibliotheken – Aufgabenplaner (Job Scheduler). In diesem Artikel betrachten wir drei beliebte Lösungen: Quartz.NET, Hangfire und Coravel, und geben Beispiele für deren Verwendung.
1. Quartz.NET – leistungsstarker und flexibler Planer
Quartz.NET ist ein Port des beliebten Java-Frameworks Quartz. Es unterstützt komplexe Zeitpläne mit Cron-Ausdrücken, Persistenz von Aufgaben in der Datenbank, Clustering und Trigger.
Installation
dotnet add package QuartzBeispiel: Einfache Aufgabe mit Cron-Zeitplan
using Quartz;using Quartz.Impl;
public class HelloJob : IJob{ public async Task Execute(IJobExecutionContext context) { Console.WriteLine($"Hallo! Zeit: {DateTime.Now}"); }}
// Planer konfigurierenISchedulerFactory schedulerFactory = new StdSchedulerFactory();IScheduler scheduler = await schedulerFactory.GetScheduler();
// Aufgabe definierenIJobDetail job = JobBuilder.Create<HelloJob>() .WithIdentity("helloJob", "group1") .Build();
// Trigger: alle 10 SekundenITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule("0/10 * * * * ?") // alle 10 Sekunden .ForJob(job) .Build();
await scheduler.ScheduleJob(job, trigger);await scheduler.Start();Besonderheiten:
- Unterstützung von Cron-Ausdrücken (z.B.
0 0 12 * * ?– jeden Tag um 12:00 Uhr). - Speicherung von Aufgaben in ADO.NET (SQL Server, PostgreSQL, MySQL).
- Möglichkeit der dynamischen Erstellung/Löschung von Aufgaben.
- Clustering für Ausfallsicherheit.
2. Hangfire – Einfachheit und integriertes Dashboard
Hangfire ist eine Bibliothek zur Ausführung von Hintergrundaufgaben mit minimaler Konfiguration. Sie bietet ein integriertes Web-Dashboard zur Überwachung, Wiederholungsversuche bei Fehlern und Integration mit ASP.NET Core.
Installation
dotnet add package Hangfiredotnet add package Hangfire.SqlServer # für Speicherung in SQL ServerBeispiel: Verzögerte und wiederkehrende Aufgabe
using Hangfire;
// Konfiguration in Startup.cspublic void ConfigureServices(IServiceCollection services){ services.AddHangfire(config => config.UseSqlServerStorage("connection_string")); services.AddHangfireServer();}
public void Configure(IApplicationBuilder app){ app.UseHangfireDashboard(); // /hangfire // Wiederkehrende Aufgabe: alle 5 Minuten RecurringJob.AddOrUpdate( "cleanup-cache", () => Console.WriteLine("Cache-Bereinigung..."), "*/5 * * * *"); // Verzögerte Aufgabe (in 1 Stunde) BackgroundJob.Schedule( () => SendEmail("user@example.com"), TimeSpan.FromHours(1));}
public void SendEmail(string email){ Console.WriteLine($"Sende E-Mail an {email}");}Vorteile:
- Integriertes Dashboard (
/hangfire) zur Ansicht des Aufgabenstatus. - Automatische Wiederholungen bei Fehlern.
- Unterstützung von Warteschlangen (standardmäßig Redis oder SQL Server).
- Einfache Integration mit ASP.NET Core über DI.
3. Coravel – leichter Planer für .NET Core
Coravel ist eine minimalistische Bibliothek, die keine externen Abhängigkeiten benötigt (außer .NET selbst). Sie ist ideal für kleine Projekte, bei denen keine Persistenz erforderlich ist.
Installation
dotnet add