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.