CA2261 : Ne pas utiliser ConfigureAwaitOptions.SuppressThrowing avec Task<TResult>

Propriété Value
Identificateur de la règle CA2261
Titre Ne pas utiliser ConfigureAwaitOptions.SuppressThrowing avec Task<TResult>
Catégorie Utilisation
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Comme avertissement

Cause

Une valeur de ConfigureAwaitOptions.SuppressThrowing est passée à Task<TResult>.ConfigureAwait(ConfigureAwaitOptions).

Description de la règle

L’option ConfigureAwaitOptions.SuppressThrowing n’est pas prise en charge par le Task<TResult> générique, car cela peut entraîner le renvoi d’un TResult non valide. Cette règle signale l’utilisation de SuppressThrowing avec Task<TResult> pour exposer l’erreur au moment de la génération et non de l’exécution.

Comment corriger les violations

Castez Task<TResult> vers un Task non générique avant d’appeler ConfigureAwait(ConfigureAwaitOptions).

Exemple

L’extrait de code suivant montre une violation de CA2261 :

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

L’extrait de code suivant montre le correctif :

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

Quand supprimer les erreurs

Vous ne devez supprimer aucun avertissement de cette règle. Si la tâche est défectueuse ou annulée, TResult n’est pas valide et provoque des erreurs d’exécution.