Quartz.NET für C# (.NET): Das ultimative Handbuch zur Aufgabenplanung
Quartz.NET ist eine leistungsstarke, flexible und weit verbreitete Open-Source-Bibliothek zur Aufgabenplanung für .NET-Anwendungen. Sie ermöglicht Entwicklern, Hintergrundaufgaben zeitgesteuert zu erstellen, zu verwalten und auszuführen. Ob Sie Code zu einer bestimmten Uhrzeit, in regelmäßigen Abständen oder als Reaktion auf ein Ereignis ausführen möchten (wie Cron-Jobs unter Linux) – Quartz.NET ist die richtige Wahl. Die Bibliothek ist ein Port des beliebten Java-Frameworks Quartz Scheduler.
Warum braucht man das? In der modernen Entwicklung gibt es oft Aufgaben, die nicht synchron auf eine Benutzeranfrage hin ausgeführt werden sollen. Dazu gehören E-Mail-Newsletter, das Löschen temporärer Dateien, die Datensynchronisation mit externen APIs, die Berichterstellung, die Cache-Aktualisierung und vieles mehr. Quartz.NET bietet einen zuverlässigen und ausfallsicheren Mechanismus für solche Aufgaben. Es unterstützt die Speicherung von Job-Zuständen in einer Datenbank (JobStore), sodass die Anwendung Neustarts übersteht, und ermöglicht Clustering zur Lastverteilung.
Im Gegensatz zu einfachen System.Threading.Timer oder BackgroundService-Implementierungen bietet Quartz.NET eine umfangreiche API zur Verwaltung des Job-Lebenszyklus, komplexe Trigger (täglich, wöchentlich, per CRON-Ausdruck), parallele Ausführung, Ereignisüberwachung und vieles mehr. Das macht es zum De-facto-Standard für die Aufgabenplanung im .NET-Ökosystem.
Installation
Quartz.NET wird über NuGet verteilt. Verwenden Sie einen der folgenden Befehle in der Paket-Manager-Konsole:
# Installation des Hauptpakets
dotnet add package Quartz
# Falls Sie XML-Konfiguration benötigen
dotnet add package Quartz.Plugins
# Für die Nutzung mit Dependency Injection (empfohlen für ASP.NET Core)
dotnet add package Quartz.Extensions.Hosting
Für klassisches .NET Framework (z. B. .NET 4.8) verwenden Sie die NuGet-Konsole:
Install-Package Quartz
Schnellstart: Minimales funktionsfähiges Beispiel
Erstellen wir eine einfache Konsolenanwendung, die alle 5 Sekunden "Hallo, Quartz!" ausgibt.
using System;
using System.Threading.Tasks;
using Quartz;
using Quartz.Impl;
namespace QuartzQuickStart
{
// 1. Job (Aufgabe) erstellen
public class HelloJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await Console.Out.WriteLineAsync($"Hallo, Quartz! Zeit: {DateTime.Now:HH:mm:ss}");
}
}
class Program
{
static async Task Main(string[] args)
{
// 2. Scheduler-Factory erstellen
StdSchedulerFactory factory = new StdSchedulerFactory();
// 3. Scheduler abrufen
IScheduler scheduler = await factory.GetScheduler();
// 4. Scheduler starten
await scheduler.Start();
// 5. Aufgabe (Job) definieren
IJobDetail job = JobBuilder.Create()
.WithIdentity("myJob", "group1")
.Build();
// 6. Trigger (Zeitplan) definieren
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("myTrigger", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(5)
.RepeatForever())
.Build();
// 7. Aufgabe und Trigger im Scheduler registrieren
await scheduler.ScheduleJob(job, trigger);
// 8. Warten, damit die Konsole nicht schließt
await Task.Delay(TimeSpan.FromSeconds(30));
// 9. Scheduler anhalten
await scheduler.Shutdown();
}
}
}