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.