Worker Services in .NET Core 3.0

In de laatste versies van Visual Studio 2019 is een project template toegevoegd voor Worker Services. Dit template is uitermate geschikt om lang lopende processen mee te ontwikkelen.

Een Worker Service is een console applicatie waarin een Worker class zit (Dit kan ook een andere class naar keuze zijn. In de Program.cs wordt m.b.v. de AddHostedService methode de juiste class gekoppeld). Deze Worker class bevat een ExecuteAsync methode. In deze methode kan de logica worden geïmplementeerd.

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    while (!stoppingToken.IsCancellationRequested)
    {
        _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
        await Task.Delay(1000, stoppingToken);
    }
}

Een Worker Service kan ook eenvoudig als Windows Service gedraaid kan worden. Hiervoor wordt het Microsoft.Extensions.Hosting.WindowsServices NuGet package gebruikt. Deze bevat een extension method UseWindowsService welke in de Startup class gebruikt kan worden.

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseWindowsService()
            .ConfigureServices(services =>
            {
                services.AddHostedService();
            });

Om deze Worker service nu echt als Windows Service te installeren en gebruiken dienen we het volgende command in een admin command prompt uit te voeren:

sc create workertest BinPath=WorkerServiceDemo.exe

Hierbij dien je het BinPath te laten wijzen naar de executable van jouw applicatie. Je kan de applicatie nu terugvinden bij de Windows Services.

Zoals je ziet is het eenvoudig om in .NET Core 3.0 Windows Services te maken voor lang lopende processen. Een voorbeeld applicatie kun je hier downloaden.