CA2024: No usar StreamReader.EndOfStream en métodos asincrónicos
Propiedad | Valor |
---|---|
de identificador de regla | CA2024 |
título de |
No use StreamReader.EndOfStream en métodos asincrónicos |
categoría | de confiabilidad de |
corrección está interrumpiendo o no importantes | No interrumpir |
Habilitado de forma predeterminada en la de .NET 10 | Como advertencia |
Causa
Se realiza una llamada a StreamReader.EndOfStream dentro de un método asincrónico.
Descripción de la regla
La propiedad StreamReader.EndOfStream puede provocar un bloqueo sincrónico no deseado cuando no se almacena en búfer ningún dato. En su lugar, use StreamReader.ReadLineAsync() directamente, que devuelve null
al llegar al final de la secuencia.
Cómo corregir infracciones
Para corregir una infracción, llame directamente a StreamReader.ReadLineAsync() y compruebe el valor devuelto de null
.
Ejemplo
El siguiente fragmento de código muestra una infracción de 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
El siguiente fragmento de código corrige la infracción:
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
Cuándo suprimir advertencias
No debería suprimir advertencias de esta regla, ya que la aplicación podría bloquearse si no corrige las infracciones.
Suprimir una advertencia
Si solo desea suprimir una sola infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y, a continuación, volver a habilitar la regla.
#pragma warning disable CA2024
// The code that's violating the rule is on this line.
#pragma warning restore CA2024
Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none
en el archivo de configuración de .
[*.{cs,vb}]
dotnet_diagnostic.CA2024.severity = none
Para obtener más información, vea Cómo suprimir advertencias de análisis de código.