CA2261: Non usare ConfigureAwaitOptions.SuppressThrowing
con Task<TResult>
Proprietà | valore |
---|---|
ID regola | CA2261 |
Title | Non usare ConfigureAwaitOptions.SuppressThrowing con Task<TResult> |
Categoria | Utilizzo |
Correzione che causa un'interruzione o un'interruzione | Nessuna interruzione |
Abilitato per impostazione predefinita in .NET 8 | Come avviso |
Causa
Un valore di ConfigureAwaitOptions.SuppressThrowing viene passato a Task<TResult>.ConfigureAwait(ConfigureAwaitOptions).
Descrizione regola
L'opzione ConfigureAwaitOptions.SuppressThrowing non è supportata dall'oggetto generico Task<TResult>, perché potrebbe causare la restituzione di un oggetto non valido TResult
. Questa regola contrassegna l'uso di SuppressThrowing con Task<TResult> per visualizzare l'errore in fase di compilazione anziché in fase di esecuzione.
Come correggere le violazioni
Eseguire il cast di a un oggetto non generico Task prima di Task<TResult> chiamare ConfigureAwait(ConfigureAwaitOptions).
Esempio
Il frammento di codice seguente mostra una violazione di CA2261:
Task<int> t = new Task<int>(() => 1);
t.ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing);
Il frammento di codice seguente mostra la correzione:
Task<int> t = new Task<int>(() => 1);
((Task)t).ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing);
Quando eliminare gli errori
Non è consigliabile eliminare gli avvisi da questa regola. Se l'attività è difettosa o annullata, TResult
non sarà valida e causerà errori di run-time.