Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
BackgroundService теперь выполняет всю работу ExecuteAsync на фоновом потоке. Ранее синхронная часть ExecuteAsync (до первой await) выполнялась на основном потоке выполнения во время запуска службы, что препятствовало запуску других служб. Только код после первого await запускался на фоновом потоке.
Представленная версия
.NET 10
Предыдущее поведение
Ранее синхронная часть ExecuteAsync выполнялась в основном потоке и блокировала запуск других служб.
Новое поведение
Начиная с .NET 10, все ExecuteAsync выполняется в фоновом потоке, и ни одна его часть не блокирует запуск других служб.
Тип разрушающего изменения
Это изменение поведения.
Причина изменения
Предыдущее поведение было распространенной ловушкой, которая не соответствовала ожиданиям пользователей. Большинство разработчиков BackgroundService не понимали, что синхронная часть перед первым вызовом await блокировала запуск других служб во время запуска приложения.
Рекомендуемое действие
Если требуется запуск любой части вашего BackgroundService.ExecuteAsync во время старта (в синхронном режиме, блокирующем другие службы), вы можете выполнить одно из следующих действий:
- Поместите код, который должен синхронно выполняться в конструкторе, он будет запускаться как часть процесса создания службы.
- Переопределите
StartAsyncи выполните некоторые действия перед вызовомbase.StartAsync.StartAsyncсохраняет поведение, при котором его синхронная часть запускается синхронно и блокирует запуск других служб во время старта. - Если вы хотите запустить код в более определенное время при запуске службы, реализуйте Microsoft.Extensions.Hosting.IHostedLifecycleService в вашем
BackgroundService. - Откажитесь от
BackgroundServiceи создайте собственный Microsoft.Extensions.Hosting.IHostedService.