Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
BackgroundService exécute maintenant l’intégralité de ExecuteAsync sur un thread d'arrière-plan. Auparavant, la partie synchrone de ExecuteAsync (avant la première await) s’exécutait sur le thread principal lors du démarrage du service, ce qui empêche d’autres services de démarrer. Seul le code exécuté après le premier await a été exécuté sur un thread d’arrière-plan.
Version introduite
.NET 10
Comportement précédent
Précédemment, la partie synchrone a été exécutée par ExecuteAsync sur le thread principal et a bloqué le démarrage d’autres services.
Nouveau comportement
À partir de .NET 10, ExecuteAsync fonctionne entièrement sur un thread d'arrière-plan, et aucune de ses parties n'empêche le démarrage des autres services.
Type de changement cassant
Ce changement est un changement de comportement.
Raison de la modification
Le comportement précédent était un piège courant qui ne répondait pas aux attentes des utilisateurs. La plupart des implémenteurs de BackgroundService n'ont pas compris que la partie synchrone avant le premier await bloquait le démarrage d'autres services pendant le démarrage de l'application.
Action recommandée
Si vous avez besoin qu'une partie de votre BackgroundService.ExecuteAsync s’exécute plus tôt pendant le démarrage (de façon synchrone et en bloquant d'autres services), vous pouvez effectuer l'une des opérations suivantes :
- Placez le code qui doit s’exécuter de manière synchrone dans le constructeur, et il s’exécute dans le cadre de la construction du service.
- Redéfinissez
StartAsyncet effectuez un travail avant d’appelerbase.StartAsync.StartAsyncconserve le comportement que sa partie synchrone s’exécute de manière synchrone pendant le démarrage et empêche d’autres services de démarrer. - Si vous souhaitez exécuter du code à un moment plus spécifique au démarrage du service, implémentez Microsoft.Extensions.Hosting.IHostedLifecycleService sur votre
BackgroundService. - Renoncez entièrement à
BackgroundServiceet concevez votre propre Microsoft.Extensions.Hosting.IHostedService.