Megosztás a következőn keresztül:


CA2024: Ne használja a StreamReader.EndOfStreamet aszinkron metódusokban

Ingatlan Érték
szabályazonosító CA2024
cím Ne használja a StreamReader.EndOfStreamet aszinkron metódusokban
kategória megbízhatósági
Javítás kompatibilitástörő vagy nem kompatibilitástörő Nem törés
Alapértelmezés szerint engedélyezve van a .NET 10 Figyelmeztetésként

Ok

A StreamReader.EndOfStream hívása egy aszinkron metóduson belül történik.

Szabály leírása

A StreamReader.EndOfStream tulajdonság nem szándékos szinkron blokkolást okozhat, ha nincs pufferelt adat. Ehelyett használja közvetlenül a StreamReader.ReadLineAsync(), amely a stream végének elérésekor null ad vissza.

Szabálysértések kijavítása

Szabálysértés kijavításához hívja meg közvetlenül StreamReader.ReadLineAsync(), és ellenőrizze a nullvisszatérési értékét.

Példa

A következő kódrészlet a CA2024 megsértését mutatja be:

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

A következő kódrészlet kijavítja a szabálysértést:

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

Mikor kell letiltani a figyelmeztetéseket?

Ne tiltsa le a szabály figyelmeztetéseit, mert előfordulhat, hogy az alkalmazás lefagy, ha nem oldja meg a szabálysértéseket.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

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

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

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

További információ: Kódelemzési figyelmeztetések letiltása.