Dela via


CA2024: Använd inte StreamReader.EndOfStream i asynkrona metoder

Egenskap Värde
regel-ID CA2024
rubrik Använd inte StreamReader.EndOfStream i asynkrona metoder
kategori Tillförlitlighet
Korrigeringen är Icke-icke-bryta
Aktiverad som standard i .NET 10 Som varning

Orsak

Ett anrop till StreamReader.EndOfStream görs i en asynkron metod.

Regelbeskrivning

Egenskapen StreamReader.EndOfStream kan orsaka oavsiktlig synkron blockering när inga data buffrats. Använd i stället StreamReader.ReadLineAsync() direkt, vilket returnerar null när du når slutet av strömmen.

Så här åtgärdar du överträdelser

Om du vill åtgärda en överträdelse anropar du StreamReader.ReadLineAsync() direkt och kontrollerar returvärdet för null.

Exempel

Följande kodfragment visar ett brott mot CA2024:

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

Följande kodfragment åtgärdar överträdelsen:

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

När du ska ignorera varningar

Du bör inte ignorera varningar från den här regeln eftersom din app kan hänga sig om du inte åtgärdar överträdelserna.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.