Excepciones no controladas de una instancia de BackgroundService
En versiones anteriores, cuando BackgroundService inicia una excepción no controlada, la excepción se pierde y el servicio parece no responder. En .NET 6 se corrige este comportamiento mediante el registro de la excepción y la detención del host.
Descripción del cambio
En versiones anteriores de .NET, cuando se produce una excepción desde una invalidación de BackgroundService.ExecuteAsync(CancellationToken), se pierde la excepción y el servicio no responde. El host continúa ejecutándose y no se registra ningún mensaje.
A partir de .NET 6, cuando se inicia una excepción desde una invalidación de BackgroundService.ExecuteAsync(CancellationToken), la excepción se registra en la interfaz ILogger actual. De forma predeterminada, el host se detiene cuando se encuentra una excepción no controlada.
Versión introducida
.NET 6
Motivo del cambio
El nuevo comportamiento es coherente con el de otros modelos de aplicación cuando se encuentran excepciones no controladas. También resulta confuso para los desarrolladores cuando su instancia de BackgroundService detecta un error, pero no se registra nada. El mejor comportamiento predeterminado consiste en detener el host, ya que las excepciones no controladas no se deben omitir. Indican un problema que necesita atención.
Acción recomendada
Si prefiere mantener el comportamiento anterior de permitir una excepción no controlada en una instancia de BackgroundService y no detener el host, puede establecer HostOptions.BackgroundServiceExceptionBehavior en BackgroundServiceExceptionBehavior.Ignore.
Host.CreateBuilder(args)
.ConfigureServices(services =>
{
services.Configure<HostOptions>(hostOptions =>
{
hostOptions.BackgroundServiceExceptionBehavior = BackgroundServiceExceptionBehavior.Ignore;
});
});