CA2261: Não usar ConfigureAwaitOptions.SuppressThrowing com Task<TResult>

Propriedade Valor
ID da regra CA2261
Título Não use ConfigureAwaitOptions.SuppressThrowing com Task<TResult>
Categoria Usage
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Como aviso

Causa

Um valor de ConfigureAwaitOptions.SuppressThrowing é passado para Task<TResult>.ConfigureAwait(ConfigureAwaitOptions).

Descrição da regra

A opção ConfigureAwaitOptions.SuppressThrowing não é compatível com o genérico Task<TResult>, pois isso pode levar ao retorno de um TResult inválido. Essa regra sinaliza o uso de SuppressThrowing com Task<TResult> para exibir o erro no tempo de build em vez de tempo de execução.

Como corrigir violações

Converta o Task<TResult> em um Task não genérico antes de chamar ConfigureAwait(ConfigureAwaitOptions).

Exemplo

O snippet de código a seguir mostra uma violação da CA2261:

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

O seguinte snippet de código mostra a correção:

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

Quando suprimir erros

Você não deve suprimir avisos dessa regra. Se a tarefa for com falha ou cancelada, TResult será inválida e causará erros em tempo de execução.