CA2008: Jangan buat tugas tanpa meneruskan TaskScheduler
Properti | Nilai |
---|---|
ID Aturan | CA2008 |
Judul | Jangan membuat tugas tanpa melewati TaskScheduler |
Golongan | Keandalan |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | No |
Penyebab
Pembuatan tugas atau operasi kelanjutan menggunakan overload metode yang tidak menentukan parameter TaskScheduler.
Deskripsi aturan
Metode pembuatan dan kelanjutan tugas .NET berikut memiliki kelebihan beban yang memungkinkan menentukan atau menghilangkan TaskScheduler instans:
Selalu tentukan argumen eksplisit TaskScheduler untuk menghindari nilai default Current , yang perilakunya ditentukan oleh pemanggil dan dapat bervariasi pada waktu proses. Current mengembalikan penjadwal yang terkait dengan apa pun yang Task saat ini berjalan pada utas tersebut. Jika tidak ada tugas seperti itu, ia mengembalikan Default, yang mewakili kumpulan utas. Penggunaan Current dapat menyebabkan kebuntuan atau masalah responsI UI dalam beberapa situasi, ketika dimaksudkan untuk membuat tugas pada kumpulan utas, tetapi sebaliknya menunggu untuk kembali ke utas UI.
Untuk informasi lebih lanjut dan contoh terperinci, lihat TaskCreationOptions baru dan TaskContinuationOptions di .NET Framework 4.5.
Catatan
VSTHRD105 - Hindari kelebihan metode yang mengasumsikan TaskScheduler.Current adalah aturan serupa yang diterapkan dalam paket Microsoft.VisualStudio.Threading.Analyzers .
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran, panggil metode kelebihan beban yang mengambil TaskScheduler dan secara eksplisit meneruskan Default atau Current untuk memperjelas niat.
Kapan harus menekan peringatan
Peringatan ini ditujukan terutama untuk pustaka, di mana kode dapat dijalankan di lingkungan arbitrer dan di mana kode tidak boleh membuat asumsi tentang lingkungan atau bagaimana pemanggil metode mungkin memanggil atau menunggunya. Mungkin tepat untuk menekan peringatan untuk proyek yang mewakili kode aplikasi daripada kode pustaka.
Menyembunyikan peringatan
Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.
#pragma warning disable CA2008
// The code that's violating the rule is on this line.
#pragma warning restore CA2008
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA2008.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.