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 none
olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA2247.severity = none
Bu kural kategorisinin tamamını devre dışı bırakmak için, kategorinin önem derecesini none
yapı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..