Niet-verwerkte uitzonderingen van een BackgroundService

Wanneer in eerdere versies een BackgroundService niet-verwerkte uitzondering wordt gegenereerd, gaat de uitzondering verloren en reageert de service niet meer. .NET 6 lost dit gedrag op door de uitzondering te registreren en de host te stoppen.

Wijzigingsbeschrijving

In eerdere .NET-versies, wanneer er een uitzondering wordt gegenereerd bij een BackgroundService.ExecuteAsync(CancellationToken) onderdrukking, blijft de host actief en wordt er geen bericht geregistreerd.

Vanaf .NET 6, wanneer er een uitzondering wordt gegenereerd vanuit een BackgroundService.ExecuteAsync(CancellationToken) onderdrukking, wordt de uitzondering geregistreerd bij de huidige ILogger. De host wordt standaard gestopt wanneer er een niet-verwerkte uitzondering wordt aangetroffen.

Versie geïntroduceerd

.NET 6

Reden voor wijziging

Het nieuwe gedrag is consistent met de manier waarop andere app-modellen zich gedragen wanneer er niet-verwerkte uitzonderingen worden aangetroffen. Het is ook verwarrend voor ontwikkelaars wanneer ze BackgroundService een fout tegenkomen, maar er wordt niets geregistreerd. Het beste standaardgedrag is om de host te stoppen, omdat niet-verwerkte uitzonderingen niet mogen worden genegeerd. Ze geven een probleem aan dat aandacht nodig heeft.

Als u liever het vorige gedrag behoudt van het toestaan van een onverwerkte uitzondering in een BackgroundService om de host niet te stoppen, kunt u instellen HostOptions.BackgroundServiceExceptionBehavior op BackgroundServiceExceptionBehavior.Ignore.

Host.CreateBuilder(args)
    .ConfigureServices(services =>
    {
        services.Configure<HostOptions>(hostOptions =>
        {
            hostOptions.BackgroundServiceExceptionBehavior = BackgroundServiceExceptionBehavior.Ignore;
        });
    });

Betrokken API's