다음을 통해 공유


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

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

원인

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

규칙 설명

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

위반을 해결하는 방법

위반 문제를 해결하려면 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

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