Ausnahmefehler der Klasse „BackgroundService“
Wurde in früheren Versionen eine Ausnahme von BackgroundService ausgelöst, ging die Ausnahme verloren, und der Dienst schien nicht mehr zu reagieren. In .NET 6 wird dieses Verhalten behoben, indem die Ausnahme protokolliert und der Host beendet wird.
Änderungsbeschreibung
Wenn in früheren .NET-Versionen eine Ausnahme von einer BackgroundService.ExecuteAsync(CancellationToken)-Außerkraftsetzung ausgelöst wurde, geht die Ausnahme verloren, und der Dienst reagiert nicht mehr. Der Host wird weiterhin ausgeführt, und es wird keine Nachricht protokolliert.
Ab .NET 6 wird eine Ausnahme, die durch die Außerkraftsetzung BackgroundService.ExecuteAsync(CancellationToken) ausgelöst wird, in der aktuellen ILogger-Schnittstelle protokolliert. Standardmäßig wird der Host bei einem Ausnahmefehler beendet.
Eingeführt in Version
.NET 6
Grund für die Änderung
Das neue Verhalten ist mit dem Verhalten anderer App-Modelle bei Ausnahmefehlern konsistent. Zudem ist es für Entwickler verwirrend, wenn bei einem Fehler in BackgroundService keine Meldung protokolliert wird. Am besten wird der Host standardmäßig beendet, da Ausnahmefehler nicht ignoriert werden sollten. Sie weisen auf ein Problem hin, das behoben werden sollte.
Empfohlene Maßnahme
Wenn Sie das bisherige Verhalten beibehalten möchten, bei dem bei einem Ausnahmefehler der Klasse BackgroundService der Host nicht beendet wird, legen Sie HostOptions.BackgroundServiceExceptionBehavior auf BackgroundServiceExceptionBehavior.Ignore fest.
Host.CreateBuilder(args)
.ConfigureServices(services =>
{
services.Configure<HostOptions>(hostOptions =>
{
hostOptions.BackgroundServiceExceptionBehavior = BackgroundServiceExceptionBehavior.Ignore;
});
});