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.

Veröffentlicht von Norbert Eder

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Cookie-Einstellungen
Auf dieser Website werden Cookie verwendet. Diese werden für den Betrieb der Website benötigt oder helfen uns dabei, die Website zu verbessern.
Alle Cookies zulassen
Auswahl speichern
Individuelle Einstellungen
Individuelle Einstellungen
Dies ist eine Übersicht aller Cookies, die auf der Website verwendet werden. Sie haben die Möglichkeit, individuelle Cookie-Einstellungen vorzunehmen. Geben Sie einzelnen Cookies oder ganzen Gruppen Ihre Einwilligung. Essentielle Cookies lassen sich nicht deaktivieren.
Speichern
Abbrechen
Essenziell (1)
Essenzielle Cookies werden für die grundlegende Funktionalität der Website benötigt.
Cookies anzeigen