CA1849 : appeler des méthodes asynchrones dans une méthode asynchrone
Propriété | Value |
---|---|
Identificateur de la règle | CA1849 |
Titre | Appeler des méthodes async dans une méthode async |
Catégorie | Performances |
Le correctif est cassant ou non cassant | Sans rupture |
Activée par défaut dans .NET 9 | Non |
Cause
Toutes les méthodes dont il existe un équivalent avec suffixe asynchrone produisent cet avertissement lorsqu’elles sont appelées à partir d’une méthode retournant une Task. Les méthodes Task.Wait()
, Task<T>.Result
et Task.GetAwaiter().GetResult()
génèrent également cet avertissement lorsqu’elles sont appelées.
Description de la règle
Dans une méthode déjà asynchrone, les appels d’autres méthodes doivent être à leurs versions asynchrones, là où elles existent.
Comment corriger les violations
Violation :
Task DoAsync()
{
file.Read(buffer, 0, 10);
}
Correctif :
Attendez la version asynchrone de la méthode :
async Task DoAsync()
{
await file.ReadAsync(buffer, 0, 10);
}
Quand supprimer les avertissements
Vous pouvez sans risque supprimer un avertissement de cette règle dans le cas où il existe deux chemins du code distincts pour le code synchrone et le code asynchrone, en utilisant une condition if. En outre, s’il existe une vérification permettant de déterminer si la Task a été résolue, vous pouvez sans risque utiliser des méthodes et des propriétés synchrones.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA1849
// The code that's violating the rule is on this line.
#pragma warning restore CA1849
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA1849.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.