BackgroundService은 이제 전체 ExecuteAsync을(를) 백그라운드 스레드에서 실행합니다. 이전에는 서비스 시작 중에 (첫 번째 ExecuteAsync이전)의 await 동기 부분이 주 스레드에서 실행되었으므로 다른 서비스가 시작하지 못하도록 차단했습니다. 첫 번째 await 실행 후의 코드만 백그라운드 스레드에서 실행됩니다.
도입된 버전
.NET 10
이전 동작
이전에는 주 스레드에서 ExecuteAsync 동기 부분이 실행되어 다른 서비스가 시작되지 않도록 차단했습니다.
새 동작
.NET 10부터는 모든 ExecuteAsync 실행이 백그라운드 스레드에서 실행되고 일부도 다른 서비스가 시작되지 않도록 차단하지 않습니다.
파괴적 변경 유형
이 변경은 동작 변경입니다.
변경 이유
이전 동작은 사용자 기대치를 충족하지 못하는 일반적인 문제였습니다. 대부분의 구현자는 애플리케이션 시작 시 첫 번째 await 전에 동기화된 부분이 다른 서비스의 시작을 차단한다는 것을 이해하지 못했습니다.
권장 작업
시작 시 동기적으로 실행하고 다른 서비스를 차단해야 하는 경우 귀하의 BackgroundService.ExecuteAsync 중 일부를 이전에 실행하려면 다음 중 하나를 수행할 수 있습니다.
- 생성자에서 동기적으로 실행해야 하는 코드를 배치하고 서비스 생성의 일부로 실행합니다.
-
StartAsync를 재정의하고base.StartAsync를 호출하기 전에 몇 가지 작업을 수행합니다.StartAsync는 시작 중에 동기 부분이 동기적으로 실행되는 동작을 유지하고 다른 서비스가 시작되지 않도록 차단합니다. - 서비스를 시작할 때 더 구체적인 시점에 코드를 실행하려면,
BackgroundService에 Microsoft.Extensions.Hosting.IHostedLifecycleService을(를) 구현하십시오. -
BackgroundService을/를 완전히 포기하고 자신의 Microsoft.Extensions.Hosting.IHostedService을/를 구현하십시오.
영향을 받는 API
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET