Share via


Ohanterade undantag från en BackgroundService

När ett BackgroundService ohanterat undantag genereras i tidigare versioner går undantaget förlorat och tjänsten verkar inte svara. .NET 6 åtgärdar det här beteendet genom att logga undantaget och stoppa värden.

Ändra beskrivning

När ett undantag genereras från en BackgroundService.ExecuteAsync(CancellationToken) åsidosättning i tidigare .NET-versioner fortsätter värden att köras och inget meddelande loggas.

Från och med .NET 6, när ett undantag genereras från en BackgroundService.ExecuteAsync(CancellationToken) åsidosättning, loggas undantaget till den aktuella ILogger. Som standard stoppas värden när ett ohanterat undantag påträffas.

Version introducerad

.NET 6

Orsak till ändringen

Det nya beteendet överensstämmer med hur andra appmodeller beter sig när ohanterade undantag påträffas. Det är också förvirrande för utvecklare när de BackgroundService stöter på ett fel, men ingenting loggas. Det bästa standardbeteendet är att stoppa värden eftersom ohanterade undantag inte bör ignoreras. De indikerar ett problem som behöver åtgärdas.

Om du föredrar att behålla det tidigare beteendet att tillåta ett ohanterat undantag i en BackgroundService för att inte stoppa värden kan du ange HostOptions.BackgroundServiceExceptionBehavior till BackgroundServiceExceptionBehavior.Ignore.

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

Berörda API:er