Delen via


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.