Neošetřené výjimky ze služby BackgroundService
V předchozích verzích dojde při BackgroundService vyvolání neošetřené výjimky ke ztrátě výjimky a služba přestane reagovat. .NET 6 toto chování řeší protokolováním výjimky a zastavením hostitele.
Změna popisu
V předchozích verzích .NET dojde při vyvolání výjimky z BackgroundService.ExecuteAsync(CancellationToken) přepsání ke ztrátě výjimky a služba přestane reagovat. Hostitel se bude dál spouštět a zaprotokoluje se žádná zpráva.
Počínaje rozhraním .NET 6, pokud je vyvolána výjimka z BackgroundService.ExecuteAsync(CancellationToken) přepsání, je výjimka zaznamenána do aktuálního ILogger. Ve výchozím nastavení se hostitel zastaví, když dojde k neošetřené výjimce.
Zavedená verze
.NET 6
Důvod změny
Nové chování je konzistentní se způsobem, jakým se ostatní modely aplikací chovají, když dojde k neošetřeným výjimkám. Je také matoucí, když BackgroundService vývojáři narazí na chybu, ale nic se nezaprotokoluje. Nejlepším výchozím chováním je zastavit hostitele, protože neošetřené výjimky by neměly být ignorovány. Označují problém, který vyžaduje pozornost.
Doporučená akce
Pokud chcete zachovat předchozí chování povolení neošetřené výjimky v BackgroundService neschváli hostiteli, můžete nastavit HostOptions.BackgroundServiceExceptionBehavior na BackgroundServiceExceptionBehavior.Ignorehodnotu .
Host.CreateBuilder(args)
.ConfigureServices(services =>
{
services.Configure<HostOptions>(hostOptions =>
{
hostOptions.BackgroundServiceExceptionBehavior = BackgroundServiceExceptionBehavior.Ignore;
});
});