CA2247: TaskCompletionSource oluşturucusna 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 geçirilen bağımsız değişken TaskContinuationOptions sabit listesi yerine TaskCreationOptions sabit listesi olmalı
Kategori Kullanım
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Uyarı olarak

Neden

Bir sabit System.Threading.Tasks.TaskCompletionSource listesi değeri yerine sabit System.Threading.Tasks.TaskContinuationOptions listesi değeriyle oluşturma System.Threading.Tasks.TaskCreationOptions . Eşitlik için bir veya daha fazla değer türünü test etmek için yöntemini kullanma System.Object.ReferenceEquals .

Kural açıklaması

TaskCompletionSource türü, bir sabit listesi değerini kabul eden bir System.Threading.Tasks.TaskCreationOptions oluşturucuya ve kabul eden başka bir Objectoluşturucuya sahiptir. Bir sabit listesi değeri yerine yanlışlıkla bir System.Threading.Tasks.TaskCreationOptions sabit listesi değeri geçirilmesiSystem.Threading.Tasks.TaskContinuationOptions, -based oluşturucunun çağrılmasıyla Objectsonuçlanır: derlenir ve çalışır, ancak istenen davranışa sahip olmaz.

İhlalleri düzeltme

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

    // 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, kodun geliştiricinin istediği gibi davranmaması ve TaskCompletionSource'un belirtilen seçeneği etkin bir şekilde yoksayması gibi çağıran koddaki bir hatayı neredeyse her zaman vurgular. Uyarıyı gizlemenin güvenli olduğu tek zaman, geliştiricinin nesne durumu bağımsız değişkeni olarak kutulanmış System.Threading.Tasks.TaskContinuationOptions bir kutu geçirmeyi amaçlamış 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.