Необработанные исключения от BackgroundService
В предыдущих версиях поведение было следующим: если класс BackgroundService выдавал необработанное исключение, оно терялось и служба не отвечала на запросы. В .NET 6 это поведение было исправлено за счет регистрации исключения и остановки работы узла.
Описание изменения
В предыдущих версиях .NET при возникновении исключения после переопределения BackgroundService.ExecuteAsync(CancellationToken) узел продолжал работать и сообщение не регистрировалось.
Начиная с .NET 6, исключение, возникающее после переопределения BackgroundService.ExecuteAsync(CancellationToken), регистрируется в текущем интерфейсе ILogger. По умолчанию при возникновении необработанного исключения работа узла останавливается.
Представленные версии
.NET 6
Причина изменения
Новое поведение соответствует моделям поведения других приложений при возникновении необработанного исключения. Разработчиков приводили в замешательство ситуации, когда класс BackgroundService сталкивается с ошибкой, но данные о ней не регистрировались. Оптимальным поведением по умолчанию является остановка работы узла, поскольку необработанные исключения не должны игнорироваться. Они указывают на проблему, требующую внимания.
Рекомендуемое действие
Если вы хотите использовать предыдущее поведение, когда необработанное исключении в BackgroundService не останавливало работу узла, можно для параметра HostOptions.BackgroundServiceExceptionBehavior задать значение BackgroundServiceExceptionBehavior.Ignore.
Host.CreateBuilder(args)
.ConfigureServices(services =>
{
services.Configure<HostOptions>(hostOptions =>
{
hostOptions.BackgroundServiceExceptionBehavior = BackgroundServiceExceptionBehavior.Ignore;
});
});
Затронутые API
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по