Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
BackgroundService kör nu hela ExecuteAsync i en bakgrundstråd. Tidigare kördes den synkrona delen av ExecuteAsync (innan den första await) på huvudtråden under tjänstens start, vilket blockerade andra tjänster från att starta. Endast koden efter den första await kördes på en bakgrundstråd.
Version lanserad
.NET 10
Tidigare beteende
Tidigare kördes den synkrona delen av ExecuteAsync på huvudtråden och andra tjänster blockerades från att starta.
Nytt beteende
Från och med .NET 10 körs ExecuteAsync på en bakgrundstråd, och ingen del av den hindrar andra tjänster från att starta.
Typ av brytande ändring
Den här ändringen är en beteendeförändring.
Orsak till ändring
Det tidigare beteendet var en vanlig fallgrop som inte uppfyllde användarnas förväntningar. De flesta implementerare av BackgroundService förstod inte att den synkrona delen innan den första await blockerade andra tjänster från att starta under programstarten.
Rekommenderad åtgärd
Om du kräver att någon del av din BackgroundService.ExecuteAsync körs tidigare under starten (synkront och blockerar andra tjänster) kan du göra något av följande:
- Placera koden som måste köras synkront i konstruktorn och den körs som en del av servicekonstruktionen.
- Åsidosätt
StartAsyncoch utför lite arbete innan du anroparbase.StartAsync.StartAsyncbibehåller det beteendet där dess synkrona del körs synkront vid starten och hindrar andra tjänster från att starta. - Om du vill köra kod vid en mer specifik tidpunkt under tjänststarten implementerar Microsoft.Extensions.Hosting.IHostedLifecycleService du på din
BackgroundService. - Avstå
BackgroundServicehelt och implementera din egen Microsoft.Extensions.Hosting.IHostedService.