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.
Rekommenderad åtgärd
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
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för