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 går undantaget förlorat och tjänsten verkar inte svara. Värden fortsätter 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;
});
});