CA2024: Verwenden Sie "StreamReader.EndOfStream" nicht in asynchronen Methoden.
Eigentum | Wert |
---|---|
Regel-ID | CA2024 |
Titel | Verwenden Sie "StreamReader.EndOfStream" nicht in asynchronen Methoden. |
Kategorie- | Zuverlässigkeit |
Fix ist | Nicht brechend |
Standardmäßig in .NET 10 aktiviert | Als Warnung |
Verursachen
Ein Aufruf von StreamReader.EndOfStream erfolgt in einer asynchronen Methode.
Regelbeschreibung
Die Eigenschaft StreamReader.EndOfStream kann zu unbeabsichtigter synchroner Blockierung führen, wenn keine Daten gepuffert werden. Verwenden Sie stattdessen StreamReader.ReadLineAsync() direkt, was null
zurückgibt, wenn das Ende des Datenstroms erreicht wird.
Beheben von Verstößen
Um einen Verstoß zu beheben, rufen Sie StreamReader.ReadLineAsync() direkt auf, und überprüfen Sie den Rückgabewert für null
.
Beispiel
Der folgende Codeausschnitt zeigt einen Verstoß gegen 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
Der folgende Codeausschnitt behebt die Verletzung:
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
Wann Warnungen unterdrückt werden sollen
Sie sollten Warnungen aus dieser Regel nicht unterdrücken, da Ihre App möglicherweise hängen bleibt, wenn Sie die Verstöße nicht beheben.
Unterdrücken einer Warnung
Wenn Sie nur eine einzelne Verletzung unterdrücken möchten, fügen Sie Ihrer Quelldatei Präprozessordirektiven hinzu, um die Regel zu deaktivieren und dann erneut zu aktivieren.
#pragma warning disable CA2024
// The code that's violating the rule is on this line.
#pragma warning restore CA2024
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdateiauf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.CA2024.severity = none
Weitere Informationen finden Sie unter So unterdrücken Sie Codeanalysewarnungen.