Partager via


CA2024 : N’utilisez pas StreamReader.EndOfStream dans les méthodes asynchrones

Propriété Valeur
ID de règle CA2024
titre N’utilisez pas StreamReader.EndOfStream dans les méthodes asynchrones
catégorie de fiabilité
correctif est cassant ou non cassant Non cassant
activé par défaut dans .NET 10 En tant qu’avertissement

Cause

Un appel à StreamReader.EndOfStream est effectué à l’intérieur d’une méthode asynchrone.

Description de la règle

La propriété StreamReader.EndOfStream peut provoquer un blocage synchrone involontaire lorsqu’aucune donnée n’est mise en mémoire tampon. Utilisez plutôt StreamReader.ReadLineAsync() directement, qui retourne null lorsque vous atteignez la fin du flux.

Comment corriger les violations

Pour corriger une violation, appelez directement StreamReader.ReadLineAsync() et vérifiez la valeur de retour pour null.

Exemple

L’extrait de code suivant montre une violation de l’autorité de certification 2024 :

public async Task Example(StreamReader streamReader)
{
    while (!streamReader.EndOfStream)
    {
        string? line = await streamReader.ReadLineAsync();
        // Do something with line.
    }
}
Public Async Function Example(streamReader As StreamReader) As Task
    While Not streamReader.EndOfStream
        Dim line As String = Await streamReader.ReadLineAsync()
        ' Do something with line.
    End While
End Function

L’extrait de code suivant corrige la violation :

public async Task Example(StreamReader streamReader)
{
    string? line;
    while ((line = await streamReader.ReadLineAsync()) is not null)
    {
        // Do something with line.
    }
}
Public Async Function Example(streamReader As StreamReader) As Task
    Dim line As String = Await streamReader.ReadLineAsync()
    While line IsNot Nothing
        ' Do something with line.
        line = Await streamReader.ReadLineAsync()
    End While
End Function

Quand supprimer les avertissements

Vous ne devez pas supprimer les avertissements de cette règle, car votre application peut se bloquer si vous ne corrigez pas les violations.

Supprimer un avertissement

Si vous souhaitez simplement supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver, puis réactivez la règle.

#pragma warning disable CA2024
// The code that's violating the rule is on this line.
#pragma warning restore CA2024

Pour désactiver la règle d’un fichier, d’un dossier ou d’un projet, définissez sa gravité sur none dans le fichier de configuration .

[*.{cs,vb}]
dotnet_diagnostic.CA2024.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements d’analyse du code.