Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
BackgroundService führt nun den gesamten ExecuteAsync auf einem Hintergrundthread aus. Zuvor wurde der synchrone Teil von ExecuteAsync (vor dem ersten await) während des Dienststarts im Hauptthread ausgeführt und blockiert damit den Start anderer Dienste. Nur der Code, der nach dem ersten await ausgeführt wurde, lief in einem Hintergrundthread.
Eingeführt in Version
.NET 10
Vorheriges Verhalten
Zuvor lief der synchrone Teil von ExecuteAsync im Hauptthread und blockierte den Start anderer Dienste.
Neues Verhalten
Ab .NET 10 laufen alle ExecuteAsync Vorgänge in einem Hintergrundthread, und kein Teil davon blockiert andere Dienste daran, zu starten.
Art der einschneidenden Änderung
Diese Änderung ist eine Verhaltensänderung.
Grund für Änderung
Das vorherige Verhalten war eine häufige Stolperfalle, die nicht den Erwartungen der Benutzer entsprach. Die meisten Implementierer von BackgroundService haben nicht verstanden, dass der synchrone Teil vor dem ersten await den Prozess anderer Dienste während des Anwendungsstarts blockierte.
Empfohlene Aktion
Wenn Sie einen Teil Ihres BackgroundService.ExecuteAsync beim Start früher ausführen lassen möchten (synchron und andere Dienste blockierend), können Sie eine der folgenden Optionen wählen:
- Platzieren Sie den Code, der synchron ausgeführt werden muss, im Konstruktor, sodass er als Teil der Diensterstellung ausgeführt wird.
- Überschreiben
StartAsyncund erledigen Sie vor dem Aufrufenbase.StartAsynceinige Aufgaben.StartAsyncbehält das Verhalten bei, dass sein synchroner Teil beim Start synchron ausgeführt wird und andere Dienste am Starten hindert. - Wenn Sie Code während des Dienststarts zu einem genaueren Zeitpunkt ausführen möchten, implementieren Sie Microsoft.Extensions.Hosting.IHostedLifecycleService in Ihrem
BackgroundService. -
BackgroundServiceVerzichten Sie ganz und implementieren Sie Ihre eigenen Microsoft.Extensions.Hosting.IHostedService.