Compartir a través de


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.