Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 null
visszaté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.