Freigeben über


CA2024: Verwenden Sie "StreamReader.EndOfStream" nicht in asynchronen Methoden.

Eigentum Wert
Regel-ID CA2024
Titel Verwenden Sie "StreamReader.EndOfStream" nicht in asynchronen Methoden.
Kategorie- Zuverlässigkeit
Fix ist Nicht brechend
Standardmäßig in .NET 10 aktiviert Als Warnung

Verursachen

Ein Aufruf von StreamReader.EndOfStream erfolgt in einer asynchronen Methode.

Regelbeschreibung

Die Eigenschaft StreamReader.EndOfStream kann zu unbeabsichtigter synchroner Blockierung führen, wenn keine Daten gepuffert werden. Verwenden Sie stattdessen StreamReader.ReadLineAsync() direkt, was null zurückgibt, wenn das Ende des Datenstroms erreicht wird.

Beheben von Verstößen

Um einen Verstoß zu beheben, rufen Sie StreamReader.ReadLineAsync() direkt auf, und überprüfen Sie den Rückgabewert für null.

Beispiel

Der folgende Codeausschnitt zeigt einen Verstoß gegen 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

Der folgende Codeausschnitt behebt die Verletzung:

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

Wann Warnungen unterdrückt werden sollen

Sie sollten Warnungen aus dieser Regel nicht unterdrücken, da Ihre App möglicherweise hängen bleibt, wenn Sie die Verstöße nicht beheben.

Unterdrücken einer Warnung

Wenn Sie nur eine einzelne Verletzung unterdrücken möchten, fügen Sie Ihrer Quelldatei Präprozessordirektiven hinzu, um die Regel zu deaktivieren und dann erneut zu aktivieren.

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

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdateiauf none fest.

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

Weitere Informationen finden Sie unter So unterdrücken Sie Codeanalysewarnungen.