Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Ö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..