CA2024 : N’utilisez pas StreamReader.EndOfStream dans les méthodes asynchrones
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.