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 |
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.