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.