CA2247: Argumen yang diteruskan ke konstruktor TaskCompletionSource harus enum TaskCreationOptions alih-alih enum TaskContinuationOptions
Properti | Nilai |
---|---|
ID Aturan | CA2247 |
Judul | Argumen yang diteruskan ke konstruktor TaskCompletionSource harus enum TaskCreationOptions alih-alih enum TaskContinuationOptions |
Golongan | Penggunaan |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 8 | Sebagai peringatan |
Penyebab
Membuat System.Threading.Tasks.TaskCompletionSource
dengan System.Threading.Tasks.TaskContinuationOptions nilai enum daripada System.Threading.Tasks.TaskCreationOptions nilai enum.
Menggunakan System.Object.ReferenceEquals metode untuk menguji satu atau beberapa jenis nilai untuk kesetaraan.
Deskripsi aturan
Jenis TaskCompletionSource memiliki konstruktor yang menerima System.Threading.Tasks.TaskCreationOptions nilai enum, dan konstruktor lain yang menerima Object. Secara tidak sengaja meneruskan System.Threading.Tasks.TaskContinuationOptions nilai enum alih-alih System.Threading.Tasks.TaskCreationOptions nilai enum akan mengakibatkan panggilan Objectkonstruktor berbasis: itu akan mengompilasi dan menjalankan, tetapi tidak akan memiliki perilaku yang dimaksudkan.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran, ganti System.Threading.Tasks.TaskContinuationOptions nilai enum dengan nilai enum yang System.Threading.Tasks.TaskCreationOptions sesuai.
// Violation
var tcs = new TaskCompletionSource<int>(TaskContinuationOptions.RunContinuationsAsynchronously);
// Fixed
var tcs = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);
Kapan harus menekan peringatan
Pelanggaran aturan ini hampir selalu menyoroti bug dalam kode panggilan, sehingga kode tidak akan bereaksi seperti yang dimaksudkan pengembang, dengan TaskCompletionSource secara efektif mengabaikan opsi yang ditentukan. Satu-satunya waktu aman untuk menekan peringatan adalah jika pengembang benar-benar bermaksud meneruskan System.Threading.Tasks.TaskContinuationOptions kotak sebagai argumen status objek ke TaskCompletionSource
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 CA2247
// The code that's violating the rule is on this line.
#pragma warning restore CA2247
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA2247.severity = none
Untuk menonaktifkan seluruh kategori aturan ini, atur tingkat keparahan untuk kategori ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Usage.severity = none
Untuk informasi selengkapnya, lihat Cara menekan peringatan analisis kode..