Condividi tramite


Eccezioni non gestite da un oggetto BackgroundService

Nelle versioni precedenti, quando BackgroundService genera un'eccezione non gestita, l'eccezione viene persa e il servizio non risponde. .NET 6 corregge questo comportamento registrando l'eccezione e arrestando l'host.

Descrizione delle modifiche

Nelle versioni .NET precedenti, quando viene restituita un'eccezione da una sostituzione BackgroundService.ExecuteAsync(CancellationToken), l'eccezione viene persa e il servizio non risponde. L'host continua a essere eseguito e non vengono registrati messaggi.

A partire da .NET 6, quando viene generata un'eccezione da un override BackgroundService.ExecuteAsync(CancellationToken), l'eccezione viene registrata nel ILogger corrente. Per impostazione predefinita, l'host viene arrestato quando viene rilevata un'eccezione non gestita.

Versione introdotta

.NET 6

Motivo della modifica

Il nuovo comportamento è coerente con il comportamento degli altri modelli di app quando vengono rilevate eccezioni non gestite. Crea inoltre confusione per gli sviluppatori quando BackgroundService riscontra un errore, ma non viene registrato nulla. Il comportamento predefinito migliore consiste nell'arrestare l'host, perché le eccezioni non gestite non devono essere ignorate. Indicano un problema che richiede attenzione.

Se si preferisce mantenere il comportamento precedente di consentire a un'eccezione non gestita in un oggetto BackgroundService di non arrestare l'host, è possibile impostare HostOptions.BackgroundServiceExceptionBehavior su BackgroundServiceExceptionBehavior.Ignore.

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

API interessate