Aracılığıyla paylaş


BackgroundService tüm ExecuteAsync'i Görev olarak çalıştırır

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ı.

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 ve base.StartAsync öğesini çağırmadan önce biraz iş yapın. StartAsync baş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.

Etkilenen API'ler