CA2024: Gebruik StreamReader.EndOfStream niet in asynchrone methoden
Eigenschap | Waarde |
---|---|
regel-id | CA2024 |
titel | Gebruik StreamReader.EndOfStream niet in asynchrone methoden |
categorie | betrouwbaarheid |
Fix is fouten veroorzaken of niet-brekende | Niet-brekend |
standaard ingeschakeld in .NET 10 | Als waarschuwing |
Oorzaak
Er wordt een aanroep van StreamReader.EndOfStream uitgevoerd in een asynchrone methode.
Beschrijving van regel
De eigenschap StreamReader.EndOfStream kan onbedoeld synchrone blokkering veroorzaken wanneer er geen gegevens worden gebufferd. Gebruik in plaats daarvan StreamReader.ReadLineAsync() rechtstreeks, waarmee null
wordt geretourneerd bij het bereiken van het einde van de stream.
Schendingen oplossen
Als u een schending wilt oplossen, roept u StreamReader.ReadLineAsync() rechtstreeks aan en controleert u de retourwaarde voor null
.
Voorbeeld
Het volgende codefragment toont een schending van 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
Met het volgende codefragment wordt de schending opgelost:
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
Wanneer waarschuwingen onderdrukken
U moet waarschuwingen van deze regel niet onderdrukken, omdat uw app vastloopt als u de schendingen niet oplost.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA2024
// The code that's violating the rule is on this line.
#pragma warning restore CA2024
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst ervan in op none
in het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA2024.severity = none
Zie Codeanalysewaarschuwingen onderdrukkenvoor meer informatie.