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.
Ação recomendada
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;
});
});