CA2247: TaskCompletionSource oluşturucusuna geçirilen bağımsız değişken TaskContinuationOptions sabit listesi yerine TaskCreationOptions sabit listesi olmalıdır

Özellik Değer
Kural Kimliği CA2247
Başlık TaskCompletionSource oluşturucusuna iletilen argüman, TaskContinuationOptions sabit listesi yerine TaskCreationOptions sabit listesi olmalıdır.
Kategori Kullanım
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Uyarı olarak
Geçerli diller C# ve Visual Basic

Neden

Bir System.Threading.Tasks.TaskContinuationOptions enumerasyon değeri yerine System.Threading.Tasks.TaskCreationOptions ile System.Threading.Tasks.TaskCompletionSource oluşturma. System.Object.ReferenceEquals yöntemini kullanarak bir veya daha fazla değer türünü eşitlik için test etme.

Kural açıklaması

TaskCompletionSource türü, bir sabit listesi değerini kabul eden bir System.Threading.Tasks.TaskCreationOptions oluşturucuya ve başka bir Object kabul eden oluşturucuya sahiptir. Bir System.Threading.Tasks.TaskContinuationOptions enum değerini, bir System.Threading.Tasks.TaskCreationOptions enum değeri yerine yanlışlıkla geçirmek, Object tabanlı oluşturucunun çağrılmasına yol açar: Bu derlenecek ve çalışacaktır, ancak istenen davranışı sergilemeyecektir.

İhlalleri düzeltme

İhlali düzeltmek için System.Threading.Tasks.TaskContinuationOptions enum değerini karşılık gelen System.Threading.Tasks.TaskCreationOptions enum değeriyle değiştirin.

// Violation
var tcs = new TaskCompletionSource<int>(TaskContinuationOptions.RunContinuationsAsynchronously);

// Fixed
var tcs = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);

Uyarıların ne zaman bastırılması gerekiyor?

Bu kuralın ihlali, çağıran koddaki bir hatayı neredeyse her zaman ortaya çıkarır; bu nedenle, kod geliştiricinin amaçladığı gibi çalışmaz ve TaskCompletionSource belirtilen seçeneği etkin bir şekilde yoksayar. Uyarıyı gizlemenin güvenli olduğu tek durum, geliştiricinin System.Threading.Tasks.TaskContinuationOptions öğesini nesne durumu bağımsız değişkeni olarak kasıtlı bir şekilde geçiriyor olmasıdır TaskCompletionSource.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

#pragma warning disable CA2247
// The code that's violating the rule is on this line.
#pragma warning restore CA2247

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

[*.{cs,vb}]
dotnet_diagnostic.CA2247.severity = none

Bu kural kategorisinin tamamını devre dışı bırakmak için, kategorinin önem derecesini noneyapılandırma dosyasında olarak ayarlayın.

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Usage.severity = none

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme..

Ayrıca bkz.