Bagikan melalui


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 8 Tidak

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.

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.

Baca juga