CA2261: No utilice ConfigureAwaitOptions.SuppressThrowing con Task<TResult>

Propiedad Value
Identificador de la regla CA2261
Título No utilice ConfigureAwaitOptions.SuppressThrowing con Task<TResult>
Categoría Uso
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 Como advertencia

Causa

Se pasa un valor de ConfigureAwaitOptions.SuppressThrowing a Task<TResult>.ConfigureAwait(ConfigureAwaitOptions).

Descripción de la regla

La opción ConfigureAwaitOptions.SuppressThrowing no es compatible con el genérico Task<TResult>, ya que podría dar lugar a devolver un valor no válido TResult. Esta regla marca el uso de SuppressThrowing con Task<TResult> para exponer el error en tiempo de compilación en lugar de tiempo de ejecución.

Cómo corregir infracciones

Convierta el Task<TResult> a un Task no genérico antes de llamar a ConfigureAwait(ConfigureAwaitOptions).

Ejemplo

En el siguiente fragmento de código se muestra una infracción de la regla CA2261:

Task<int> t = new Task<int>(() => 1);
t.ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing);

En el siguiente fragmento de código se muestran la corrección:

Task<int> t = new Task<int>(() => 1);
((Task)t).ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing);

Cuándo suprimir los errores

No debería suprimir las advertencias de esta regla. Si se ha producido un error en la tarea o se cancela, TResult no será válida y provocará errores en tiempo de ejecución.