Nieobsługiwane wyjątki z usługi BackgroundService
W poprzednich wersjach, gdy BackgroundService zgłasza nieobsługiwany wyjątek, wyjątek zostanie utracony, a usługa nie odpowiada. Program .NET 6 naprawia to zachowanie, rejestrując wyjątek i zatrzymując hosta.
Opis zmiany
W poprzednich wersjach platformy .NET, gdy wyjątek jest zgłaszany z BackgroundService.ExecuteAsync(CancellationToken) przesłonięcia, wyjątek zostanie utracony i usługa nie odpowiada. Host nadal działa i nie jest rejestrowany żaden komunikat.
Począwszy od platformy .NET 6, gdy wyjątek jest zgłaszany z BackgroundService.ExecuteAsync(CancellationToken) przesłonięcia, wyjątek jest rejestrowany w bieżącym ILoggerelemencie . Domyślnie host jest zatrzymywany po napotkaniu nieobsługiwanego wyjątku.
Wprowadzona wersja
.NET 6
Przyczyna wprowadzenia zmiany
Nowe zachowanie jest zgodne ze sposobem zachowania innych modeli aplikacji w przypadku napotkania nieobsługiwane wyjątki. Jest to również mylące dla deweloperów, gdy napotka BackgroundService błąd, ale nic nie jest rejestrowane. Najlepszym zachowaniem domyślnym jest zatrzymanie hosta, ponieważ nieobsługiwane wyjątki nie powinny być ignorowane. Wskazują one problem, który wymaga uwagi.
Zalecana akcja
Jeśli wolisz zachować poprzednie zachowanie zezwalania na nieobsługiwany wyjątek w BackgroundService obiekcie , aby nie zatrzymać hosta, możesz ustawić wartość BackgroundServiceExceptionBehavior.IgnoreHostOptions.BackgroundServiceExceptionBehavior .
Host.CreateBuilder(args)
.ConfigureServices(services =>
{
services.Configure<HostOptions>(hostOptions =>
{
hostOptions.BackgroundServiceExceptionBehavior = BackgroundServiceExceptionBehavior.Ignore;
});
});