Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
BackgroundService agora executa a totalidade de ExecuteAsync em um thread de fundo. Anteriormente, a parte síncrona de ExecuteAsync (antes da primeira await) executava-se na thread principal durante a inicialização do serviço, impedindo que outros serviços fossem iniciados. Somente o código após o primeiro await foi executado em um thread em segundo plano.
Versão introduzida
.NET 10
Comportamento anterior
Anteriormente, a parte síncrona do ExecuteAsync era executada na thread principal e bloqueava a inicialização de outros serviços.
Novo comportamento
A partir do .NET 10, todo o ExecuteAsync é executado num thread em segundo plano, e nenhuma parte dele bloqueia a inicialização de outros serviços.
Tipo de mudança disruptiva
Esta alteração é de natureza comportamental .
Motivo da mudança
O comportamento anterior era uma armadilha comum que não atendia às expectativas do usuário. A maioria dos implementadores de BackgroundService não entendia que a parte síncrona antes da primeira await bloqueava a inicialização de outros serviços durante a inicialização do aplicativo.
Ação recomendada
Se você precisar que qualquer parte do seu BackgroundService.ExecuteAsync seja executada anteriormente durante a inicialização (de forma síncrona e bloqueando outros serviços), você pode fazer qualquer um dos seguintes:
- Coloque o código que precisa ser executado de forma síncrona no construtor, e ele será executado como parte da inicialização do serviço.
- Sobreponha
StartAsynce execute alguma tarefa antes de chamarbase.StartAsync.StartAsyncRetém o comportamento de que sua parte síncrona é executada de forma síncrona durante a inicialização e bloqueia a inicialização de outros serviços. - Se você quiser executar o código em um momento mais específico durante a inicialização do serviço, implemente Microsoft.Extensions.Hosting.IHostedLifecycleService no seu
BackgroundService. - Deixe de lado
BackgroundServicecompletamente e implemente o seu próprio Microsoft.Extensions.Hosting.IHostedService.