Compartilhar via


Exceções sem tratamento de um BackgroundService

Nas versões anteriores, quando um BackgroundService gerava uma exceção sem tratamento, a exceção era perdida e o serviço parecia ficar sem resposta. O .NET 6 corrige esse comportamento registrando a exceção e parando o host.

Descrição das alterações

Nas versões anteriores do .NET, quando uma exceção era gerada de uma substituição de BackgroundService.ExecuteAsync(CancellationToken), o host continuava a ser executado e nenhuma mensagem era registrada.

Do .NET 6 em diante, quando uma exceção é gerada de uma substituição de BackgroundService.ExecuteAsync(CancellationToken), a exceção é registrada no ILogger atual. Por padrão, o host é interrompido quando uma exceção sem tratamento é encontrada.

Versão introduzida

.NET 6

Motivo da alteração

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

Se você preferir manter o comportamento anterior de permitir que uma exceção sem tratamento em um BackgroundService não pare o host, defina HostOptions.BackgroundServiceExceptionBehavior como BackgroundServiceExceptionBehavior.Ignore.

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

APIs afetadas