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
Kategori Penggunaan
Perbaikan bersifat merusak atau tidak merusak Tidak terputus
Diaktifkan secara default di .NET 10 Sebagai peringatan
Bahasa yang berlaku C# dan Visual Basic

Penyebab

Membangun System.Threading.Tasks.TaskCompletionSource dengan enum nilai System.Threading.Tasks.TaskContinuationOptions daripada enum nilai System.Threading.Tasks.TaskCreationOptions. 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 nilai enum System.Threading.Tasks.TaskContinuationOptions alih-alih System.Threading.Tasks.TaskCreationOptions akan mengakibatkan pemanggilan konstruktor berbasis Object: kode akan berhasil dikompilasi dan dijalankan, 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 yang dibungkus 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 mengabaikan peringatan analisis kode.

Lihat juga