Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
BackgroundService sekarang menjalankan keseluruhan ExecuteAsync pada utas latar belakang. Sebelumnya, bagian sinkron dari ExecuteAsync (sebelum yang pertama await) berjalan pada utas utama selama startup layanan, menghalangi layanan lain untuk memulai. Hanya kode setelah yang pertama await dijalankan pada utas latar belakang.
Versi yang diperkenalkan
.NET 10
Perilaku sebelumnya
Sebelumnya, bagian sinkron berjalan ExecuteAsync pada utas utama dan memblokir layanan lain agar tidak dimulai.
Perilaku baru
Mulai dari .NET 10, semua ExecuteAsync dijalankan pada utas latar belakang, dan tidak ada bagiannya yang memblokir layanan lain untuk memulai.
Jenis perubahan yang memutus kompatibilitas
Perubahan ini adalah perubahan perilaku.
Alasan perubahan
Perilaku sebelumnya adalah perangkap umum yang tidak memenuhi harapan pengguna. Sebagian besar pelaksana BackgroundService tidak memahami bahwa bagian yang berjalan secara sinkron sebelum await pertama kali menghambat layanan lain untuk memulai selama proses startup aplikasi.
Tindakan yang direkomendasikan
Jika Anda memerlukan bagian mana pun dari Anda BackgroundService.ExecuteAsync untuk dijalankan sebelumnya selama startup (secara sinkron dan memblokir layanan lain), Anda dapat melakukan salah satu hal berikut:
- Tempatkan kode yang perlu dijalankan secara sinkron di konstruktor, dan dijalankan sebagai bagian dari konstruksi layanan.
- Ambil alih
StartAsyncdan lakukan beberapa pekerjaan sebelum memanggilbase.StartAsync.StartAsyncmempertahankan perilaku di mana bagian sinkronnya berjalan selama startup dan memblokir pengaktifan layanan lain. - Jika Anda ingin menjalankan kode pada waktu yang lebih spesifik selama startup layanan, terapkan Microsoft.Extensions.Hosting.IHostedLifecycleService pada Anda
BackgroundService. - Lewati
BackgroundServicesepenuhnya dan implementasikan Microsoft.Extensions.Hosting.IHostedService sendiri.