Sdílet prostřednictvím


CA2024: Nepoužívejte StreamReader.EndOfStream v asynchronních metodách

Vlastnost Hodnota
ID pravidla CA2024
název Nepoužívejte StreamReader.EndOfStream v asynchronních metodách.
kategorie spolehlivost
Oprava je způsobující chybu nebo Nepřerušované
Povoleno ve výchozím nastavení v rozhraní .NET 10 Jako upozornění

Příčina

Volání StreamReader.EndOfStream se provádí uvnitř asynchronní metody.

Popis pravidla

Vlastnost StreamReader.EndOfStream může způsobit nezamýšlené synchronní blokování, pokud nejsou uložena žádná data do vyrovnávací paměti. Místo toho použijte StreamReader.ReadLineAsync() přímo, který vrací null při dosažení konce datového proudu.

Jak opravit porušení

Chcete-li opravit porušení, zavolejte přímo StreamReader.ReadLineAsync() a zkontrolujte návratovou hodnotu pro null.

Příklad

Následující fragment kódu ukazuje porušení 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

Následující fragment kódu opraví porušení zásad:

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

Kdy potlačit upozornění

Upozornění z tohoto pravidla byste neměli potlačit, protože vaše aplikace může přestat reagovat, pokud porušení neopravíte.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Chcete-li pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost na none v konfiguračním souboru .

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.