Bagikan melalui


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..

Baca juga