Partilhar via


Exceções não tratadas de um BackgroundService

Em versões anteriores, quando uma BackgroundService exceção não é tratada, a exceção é perdida e o serviço aparece sem resposta. O .NET 6 corrige esse comportamento registrando a exceção e interrompendo o host.

Alterar a descrição

Em versões anteriores do .NET, quando uma exceção é lançada de uma BackgroundService.ExecuteAsync(CancellationToken) substituição, a exceção é perdida e o serviço aparece sem resposta. O host continua a ser executado e nenhuma mensagem é registrada.

A partir do .NET 6, quando uma exceção é lançada de uma BackgroundService.ExecuteAsync(CancellationToken) substituição, a exceção é registrada no arquivo .ILogger Por padrão, o host é interrompido quando uma exceção não tratada é encontrada.

Versão introduzida

.NET 6

Razão para a alteração

O novo comportamento é consistente com a maneira como outros modelos de aplicativo se comportam quando exceções não tratadas são encontradas. Também é confuso para os desenvolvedores quando encontram BackgroundService um erro, mas nada é registrado. O melhor comportamento padrão é parar o host, porque as exceções não tratadas não devem ser ignoradas. Eles indicam um problema que precisa de atenção.

Se preferir manter o comportamento anterior de permitir uma exceção não tratada em um BackgroundService para não parar o Host, você pode definir HostOptions.BackgroundServiceExceptionBehavior como BackgroundServiceExceptionBehavior.Ignore.

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

APIs afetadas