Sdílet prostřednictvím


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 rozhraní .NET se při vyvolání výjimky z BackgroundService.ExecuteAsync(CancellationToken) přepsání hostitel stále spouští a nezaprotokoluje 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.

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;
        });
    });

Ovlivněná rozhraní API