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
자세한 내용은 코드 분석 경고표시하지 않는 방법을 참조하세요.
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET