언어

CA2024: 비동기 메서드에서 StreamReader.EndOfStream을 사용하지 마세요.

재산 값
규칙 ID CA2024
타이틀 비동기 메서드에서 StreamReader.EndOfStream을 사용하지 마세요.
범주 안정성
수정이 중단되거나 호환되지 않는 호환성이 손상되지 않는 경우
.NET 10 기본적으로 사용하도록 설정 경고로
적용 가능한 언어 C# 및 Visual Basic

원인

비동기 메서드 내에서 StreamReader.EndOfStream 호출합니다.

규칙 설명

속성 StreamReader.EndOfStream 데이터가 버퍼링되지 않은 경우 의도하지 않은 동기 차단이 발생할 수 있습니다. 대신 스트림의 끝에 도달할 때 StreamReader.ReadLineAsync() 반환하는 null 직접 사용합니다.

위반을 해결하는 방법

위반 문제를 해결하려면 StreamReader.ReadLineAsync() 직접 호출하고 null반환 값을 확인합니다.

본보기

다음 코드 조각은 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

다음 코드 조각은 위반을 해결합니다.

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

경고를 표시하지 않는 경우

위반을 수정하지 않으면 앱이 중단될 수 있으므로 이 규칙의 경고를 표시하지 않아야 합니다.

경고 표시 안 함

단일 위반을 표시하지 않으려면 소스 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 다음 다시 사용하도록 설정합니다.

#pragma warning disable CA2024
// The code that's violating the rule is on this line.
#pragma warning restore CA2024

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 해당 심각도를 none 설정합니다.

[*.{cs,vb}]
dotnet_diagnostic.CA2024.severity = none

자세한 내용은 코드 분석 경고표시하지 않는 방법을 참조하세요.