CA2247: Argument předaný konstruktoru TaskCompletionSource by měl být výčet TaskCreationOptions, nikoli výčet TaskContinuationOptions

Hodnota
ID pravidla CA2247
Kategorie Použití
Oprava je přerušující nebo není přerušující. Nenarušující

Příčina

Konstrukce System.Threading.Tasks.TaskCompletionSource s System.Threading.Tasks.TaskContinuationOptions hodnotou výčtu místo System.Threading.Tasks.TaskCreationOptions hodnoty výčtu. Použití System.Object.ReferenceEquals metody k otestování jednoho nebo více typů hodnoty pro rovnost.

Popis pravidla

Typ TaskCompletionSource má konstruktor, který přijímá System.Threading.Tasks.TaskCreationOptions hodnotu výčtu, a další konstruktor, který přijímá Object . Náhodné předání System.Threading.Tasks.TaskContinuationOptions hodnoty výčtu namísto System.Threading.Tasks.TaskCreationOptions hodnoty výčtu bude mít za následek volání Object konstruktoru založeného na: bude zkompilován a spuštěn, ale nebude mít zamýšlené chování.

Jak opravit porušení

Chcete-li opravit porušení, nahraďte System.Threading.Tasks.TaskContinuationOptions hodnotu výčtu odpovídající System.Threading.Tasks.TaskCreationOptions hodnotou výčtu.

    // 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 zvýrazní chybu v volajícím kódu, takže se kód nebude chovat jako zamýšlený vývojář, přičemž TaskCompletionSource efektivně ignoruje zadanou možnost. Jediným okamžikem, kdy je bezpečné potlačit upozornění, je, že vývojář skutečně zamýšlel předat System.Threading.Tasks.TaskContinuationOptions jako argument stav objektu do TaskCompletionSource.

Viz také