Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
BackgroundService ahora ejecuta la totalidad de ExecuteAsync en un subproceso en segundo plano. Anteriormente, la parte sincrónica de ExecuteAsync (antes del primer await) se ejecutaba en el subproceso principal durante el inicio del servicio, lo que impedía que otros servicios se iniciasen. Solo el código después de la primera ejecución de await se ejecutó en un subproceso en segundo plano.
Versión introducida
.NET 10
Comportamiento anterior
Anteriormente, la parte sincrónica de ExecuteAsync se ejecutó en el subproceso principal y bloqueó el inicio de otros servicios.
Nuevo comportamiento
A partir de .NET 10, todo ExecuteAsync se ejecuta en un subproceso en segundo plano y ninguna parte de este impide que se inicien otros servicios.
Tipo de cambio disruptivo
Este es un cambio de comportamiento.
Motivo del cambio
El comportamiento anterior era un problema común que no satisface las expectativas del usuario. La mayoría de los implementadores de BackgroundService no entendieron que la parte sincrónica antes del primer await bloqueaba el inicio de otros servicios durante el inicio de la aplicación.
Acción recomendada
Si necesita que alguna parte de su BackgroundService.ExecuteAsync se ejecute antes durante el inicio (de forma sincrónica y bloqueando otros servicios), puede realizar una de las siguientes acciones:
- Coloque el código que necesita ejecutarse sincrónicamente en el constructor y se ejecuta como parte de la construcción del servicio.
- Invalide
StartAsyncy realice algún trabajo antes de llamar abase.StartAsync.StartAsyncretiene el comportamiento de que su parte sincrónica se ejecuta síncronamente durante el inicio, bloqueando el inicio de otros servicios. - Si desea ejecutar código en un momento más específico durante el inicio del servicio, implemente Microsoft.Extensions.Hosting.IHostedLifecycleService en
BackgroundService. - Descarta
BackgroundServicepor completo e implementa tu propio Microsoft.Extensions.Hosting.IHostedService.