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.
Wenn ein BackgroundService Fehler mit einer Ausnahme von der ExecuteAsync Methode auftritt und HostOptions.BackgroundServiceExceptionBehavior auf StopHost (Standardeinstellung) festgelegt ist, stoppt der Host. In .NET 11 schlagen die von RunAsync zurückgegebenen Vorgänge, StopAsync, WaitForShutdownAsync und ihre synchronen Entsprechungen jetzt mit einer Ausnahme fehl, anstatt erfolgreich abzuschließen.
Eingeführt in Version
.NET 11 Vorschau 3
Bisheriges Verhalten
Wenn zuvor eine Ausnahme von einer BackgroundService-Methode ausgelöst wurde und HostOptions.BackgroundServiceExceptionBehavior auf BackgroundServiceExceptionBehavior.StopHost gesetzt war, wurde die Aufgabe, die durch den Aufruf von RunAsync, StopAsync oder WaitForShutdownAsync zurückgegeben wurde, erfolgreich abgeschlossen. Dies bedeutete in der Regel, dass die Anwendung mit einem Erfolgsausgangscode (Null) beendet wurde.
Neues Verhalten
Ab .NET 11, wenn ein BackgroundService eine Ausnahme von der ExecuteAsync-Methode auslöst und HostOptions.BackgroundServiceExceptionBehavior auf BackgroundServiceExceptionBehavior.StopHost festgelegt ist, schlägt die Aufgabe, die beim Aufrufen von RunAsync, StopAsync oder WaitForShutdownAsync zurückgegeben wird, mit einer Ausnahme fehl. Die Anwendung wird in der Regel mit einem Fehlerausgangscode (ungleich Null) beendet.
- Wenn ein einzelner Dienst fehlschlägt, wird die vom Dienst ausgelöste Ausnahme erneut ausgelöst.
- Wenn mehrere Dienste fehlschlagen, werden ihre Fehlerausnahmen in einem AggregateException kombiniert.
Art der einschneidenden Änderung
Diese Änderung ist eine Verhaltensänderung.
Grund für die Änderung
Wenn eine Anwendung aufgrund eines Fehlers beendet wird, sollte sie nicht mit einem Erfolgsausgangscode beendet werden. Das vorherige Verhalten hat den Fehler ausgeblendet, wodurch es schwieriger wird, die Ausnahme zu erkennen und zu diagnostizieren, die ihn verursacht hat.
Empfohlene Maßnahme
Die empfohlene Aktion besteht darin, nichts zu tun – eine fehlerhafte Anwendung sollte mit einem Fehlerausgangscode, dem neuen Verhalten, beendet werden.
Wenn Sie das vorherige Verhalten beibehalten und mit einem Erfolgs-Exit-Code beenden müssen, schließen Sie await von RunAsync oder StopAsync in einen try-catch-Block ein.
try
{
await host.RunAsync();
}
catch (Exception ex)
{
// Log or inspect the exception if needed.
}
Betroffene APIs
- Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync
- Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run
- Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.StopAsync
- Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.WaitForShutdownAsync
- Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.WaitForShutdown
- Microsoft.Extensions.Hosting.IHost.StopAsync (Standardimplementierung)