Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
BackgroundService agora executa todo o ExecuteAsync em uma thread em segundo plano. Anteriormente, a parte síncrona de ExecuteAsync (antes da primeira await) era executada no thread principal durante a inicialização do serviço, impedindo que outros serviços iniciavam. Somente o código após a primeira await executou em uma thread em segundo plano.
Versão introduzida
.NET 10
Comportamento anterior
Anteriormente, a parte síncrona da ExecuteAsync era executada no thread principal e bloqueava o início de outros serviços.
Novo comportamento
No .NET 10, todas as execuções de ExecuteAsync ocorrem em um thread em segundo plano, e nenhuma parte de ExecuteAsync impede que outros serviços iniciem.
Tipo de mudança disruptiva
Essa alteração é uma mudança comportamental.
Motivo da alteração
O comportamento anterior era uma armadilha comum que não atendia às expectativas do usuário. A maioria dos BackgroundService implementadores não entendeu que a parte síncrona antes do primeiro await bloqueou o início de outros serviços durante a inicialização do aplicativo.
Ação recomendada
Se você precisar que qualquer parte de sua BackgroundService.ExecuteAsync execução seja executada anteriormente durante a inicialização (de forma síncrona e bloqueando outros serviços), poderá fazer qualquer uma das seguintes ações:
- Insira o código que precisa ser executado de forma síncrona no construtor, e ele será executado como parte da criação do serviço.
- Substitua
StartAsynce faça algum trabalho antes de chamarbase.StartAsync.StartAsyncmantém o comportamento de que sua parte síncrona é executada de forma síncrona durante a inicialização e impede que outros serviços sejam iniciados. - 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 em seu
BackgroundService. - Abandone
BackgroundServicecompletamente e implemente seu próprio Microsoft.Extensions.Hosting.IHostedService.