Niet-verwerkte uitzonderingen van een BackgroundService
Wanneer in eerdere versies een BackgroundService niet-verwerkte uitzondering wordt gegenereerd, gaat de uitzondering verloren en reageert de service niet meer. .NET 6 lost dit gedrag op door de uitzondering te registreren en de host te stoppen.
Wijzigingsbeschrijving
In eerdere .NET-versies, wanneer er een uitzondering wordt gegenereerd op basis van een BackgroundService.ExecuteAsync(CancellationToken) onderdrukking, gaat de uitzondering verloren en reageert de service niet meer. De host blijft actief en er wordt geen bericht geregistreerd.
Vanaf .NET 6, wanneer er een uitzondering wordt gegenereerd vanuit een BackgroundService.ExecuteAsync(CancellationToken) onderdrukking, wordt de uitzondering geregistreerd bij de huidige ILogger. De host wordt standaard gestopt wanneer er een niet-verwerkte uitzondering wordt aangetroffen.
Versie geïntroduceerd
.NET 6
Reden voor wijziging
Het nieuwe gedrag is consistent met de manier waarop andere app-modellen zich gedragen wanneer er niet-verwerkte uitzonderingen worden aangetroffen. Het is ook verwarrend voor ontwikkelaars wanneer ze BackgroundService een fout tegenkomen, maar er wordt niets geregistreerd. Het beste standaardgedrag is om de host te stoppen, omdat niet-verwerkte uitzonderingen niet mogen worden genegeerd. Ze geven een probleem aan dat aandacht nodig heeft.
Aanbevolen actie
Als u liever het vorige gedrag behoudt van het toestaan van een onverwerkte uitzondering in een BackgroundService om de host niet te stoppen, kunt u instellen HostOptions.BackgroundServiceExceptionBehavior op BackgroundServiceExceptionBehavior.Ignore.
Host.CreateBuilder(args)
.ConfigureServices(services =>
{
services.Configure<HostOptions>(hostOptions =>
{
hostOptions.BackgroundServiceExceptionBehavior = BackgroundServiceExceptionBehavior.Ignore;
});
});