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.

Über den Autor

Norbert Eder

Ich bin ein leidenschaftlicher Softwareentwickler und Fotograf. Mein Wissen und meine Gedanken teile ich nicht nur hier im Blog, sondern auch in Fachartikeln und Büchern.