CA2024: Non usare StreamReader.EndOfStream nei metodi asincroni
Proprietà | Valore |
---|---|
ID regola | CA2024 |
titolo | Non usare StreamReader.EndOfStream nei metodi asincroni |
categoria | affidabilità |
Correzione causa un'interruzione o un'interruzione | Nessuna interruzione |
Abilitato per impostazione predefinita in .NET 10 | Come avviso |
Causa
Una chiamata a StreamReader.EndOfStream viene eseguita all'interno di un metodo asincrono.
Descrizione regola
La proprietà StreamReader.EndOfStream può causare un blocco sincrono imprevisto quando nessun dato viene memorizzato nel buffer. Usare invece StreamReader.ReadLineAsync() direttamente, che restituisce null
quando si raggiunge la fine del flusso.
Come correggere le violazioni
Per correggere una violazione, chiamare direttamente StreamReader.ReadLineAsync() e controllare il valore restituito per null
.
Esempio
Il frammento di codice seguente mostra una violazione di 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
Il frammento di codice seguente corregge la violazione:
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
Quando eliminare gli avvisi
Non è consigliabile eliminare gli avvisi da questa regola, perché l'app potrebbe bloccarsi se non vengono risolte le violazioni.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA2024
// The code that's violating the rule is on this line.
#pragma warning restore CA2024
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità su none
nel file di configurazione .
[*.{cs,vb}]
dotnet_diagnostic.CA2024.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.