In vielen Anwendungen gibt es die Notwendigkeit, bestimmte Aufgaben in regelmäßigen Zeitintervallen auszuführen. .NET Core bietet hierfür eine einfache Möglichkeit an.
IHostedService
Die Schnittstelle IHostedService
stellt dem Entwickler die Möglichkeit bereit, einen Dienst zu implementieren, der einmal im Dependency System registriert, über die gesamte Laufzeit lebt und eine Aufgaben ausführen kann. Sie steht seit .NET Core 2.1 zur Verfügung.
Mit folgender Implementierung kann ein Job realisiert werden, der alle fünf Minuten ausgeführt wird:
public class MyImportJob : IHostedService, IDisposable
{
private ILogger<MyImportJob> Logger { get; }
private Timer _timer;
public MyImportJob(ILogger<MyImportJob> logger)
{
Logger = logger;
}
public Task StartAsync(CancellationToken cancellationToken)
{
Logger.LogInformation("Starting Job [" + nameof(NormalizedUserCheckJob) + "]");
_timer = new Timer(Check, null, TimeSpan.Zero, TimeSpan.FromMinutes(5));
return Task.CompletedTask;
}
private void Check(object state)
{
Logger.LogInformation("Running [" + nameof(MyImportJob) + "]");
// Do job here
}
public Task StopAsync(CancellationToken cancellationToken)
{
Logger.LogInformation("Stopping Job [" + nameof(MyImportJob) + "]");
_timer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
}
public void Dispose()
{
_timer?.Dispose();
}
}
Nun fehlt noch die Registrierung.
Registrierung
Schlussendlich muss eine Registrierung erfolgen. Dies geschieht in Startup.ConfigureServices
:
services.AddHostedService<MyImportJob>();
Mehr ist nicht notwendig und der Job wird ab Start des Hosts alle fünf Minuten ausgeführt.
Fazit
Wiederkehrende Aufgaben können sehr einfach über die Schnittstelle IHostedService
implementiert und ausgeführt werden. .NET Core stellt die notwendige Infrastruktur zur Verfügung. Als Softwareentwickler können wir uns voll und ganz auf die Funktionalität konzentrieren.