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 é lançada de uma substituição BackgroundService.ExecuteAsync(CancellationToken), a exceção é perdida e o serviço parece não responder. O host continua em execução e nenhuma mensagem é 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.
Ação recomendada
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;
});
});