Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
BackgroundService artık ExecuteAsync tamamını bir arka plan iş parçacığında çalıştırıyor. Daha önce, zaman uyumlu bölümü ExecuteAsync (ilk awaitöncesinde) hizmeti başlatma sırasında ana iş parçacığında çalıştırılıyor ve diğer hizmetlerin başlatılmasını engelliyordu. Yalnızca ilk await bir arka plan iş parçacığında çalıştırıldıktan sonra kod çalıştı.
Sürüm kullanıma sunulmuştur
.NET 10
Önceki davranış
Daha önce, senkronize bölüm ExecuteAsync ana thread'de çalıştırılıyordu ve diğer hizmetlerin başlatılması engelleniyordu.
Yeni davranış
.NET 10'dan başlayarak, ExecuteAsync'nin tümü arka plan iş parçacığında çalışır ve hiçbir bölümü diğer hizmetlerin başlamasını engellemez.
Kesinti yaratan değişiklik türü
Bu değişiklik davranışsal bir değişikliktir.
Değişiklik nedeni
Önceki davranış, kullanıcı beklentilerini karşılamamış yaygın bir tuzaktı. Çoğu BackgroundService uygulayıcısı, ilk await'den önceki senkron bölümün uygulama başlatma sırasında diğer hizmetlerin başlatılmasını engellediğini kavrayamadı.
Önerilen eylem
Başlangıç sırasında daha önce (zaman uyumlu olarak ve diğer hizmetleri engelleyerek) bir BackgroundService.ExecuteAsync parçasının çalıştırılmasını istiyorsanız, aşağıdakilerden herhangi birini yapabilirsiniz:
- Zaman uyumlu olarak çalışması gereken kodu oluşturucuya yerleştirin ve hizmet yapısının bir parçası olarak yürütülür.
-
StartAsyncöğesini geçersiz kılın vebase.StartAsyncöğesini çağırmadan önce biraz iş yapın.StartAsyncbaşlatma sırasında eşzamanlı bölümünün eşzamanlı çalışması özelliğini korur ve diğer hizmetlerin başlatılmasını engeller. - Hizmet başlatma sırasında kodu daha belirli bir zamanda çalıştırmak istiyorsanız, Microsoft.Extensions.Hosting.IHostedLifecycleService öğesini
BackgroundServiceüzerinde uygulayın. - Tamamen
BackgroundService'den vazgeçin ve kendi Microsoft.Extensions.Hosting.IHostedService uygulayın.