Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA2247 |
| Název | Argument předaný konstruktoru TaskCompletionSource by měl být výčet TaskCreationOptions, nikoli výčet TaskContinuationOptions |
| Kategorie | Využití |
| Oprava, která může být destruktivní nebo nedestruktivní | Nezlomitelný |
| Povoleno ve výchozím nastavení v .NET 10 | Jako upozornění |
| Příslušné jazyky | C# a Visual Basic |
Příčina
Konstruování System.Threading.Tasks.TaskCompletionSource s výčtovou hodnotou System.Threading.Tasks.TaskContinuationOptions místo výčtové hodnoty System.Threading.Tasks.TaskCreationOptions.
Použití System.Object.ReferenceEquals metody k otestování jednoho nebo více typů hodnot pro rovnost.
Popis pravidla
Typ TaskCompletionSource má konstruktor, který přijímá hodnotu výčtu System.Threading.Tasks.TaskCreationOptions, a další konstruktor, který přijímá Object. Náhodné předání hodnoty výčtu System.Threading.Tasks.TaskContinuationOptions místo hodnoty výčtu System.Threading.Tasks.TaskCreationOptions způsobí volání konstruktoru založeného na parametru Object: bude kompilován a spuštěn, ale nebude mít zamýšlené chování.
Jak opravit porušení
Chcete-li opravit porušení, nahraďte hodnotu výčtu System.Threading.Tasks.TaskContinuationOptions hodnotou výčtu odpovídající System.Threading.Tasks.TaskCreationOptions.
// Violation
var tcs = new TaskCompletionSource<int>(TaskContinuationOptions.RunContinuationsAsynchronously);
// Fixed
var tcs = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);
Kdy potlačit upozornění
Porušení tohoto pravidla téměř vždy poukazuje na chybu ve volajícím kódu, což způsobí, že se kód nechová podle záměru vývojáře, a TaskCompletionSource tak efektivně ignoruje zadanou možnost. Jediná situace, kdy je bezpečné potlačit upozornění, je, pokud vývojář skutečně zamýšlel předat zaboxovanou hodnotu jako System.Threading.Tasks.TaskContinuationOptions jako argument stavu objektu pro TaskCompletionSource.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA2247
// The code that's violating the rule is on this line.
#pragma warning restore CA2247
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA2247.severity = none
Chcete-li tuto celou kategorii pravidel zakázat, nastavte závažnost kategorie na none hodnotu v konfiguračním souboru.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Usage.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu..