Share via


CA2247: TaskCompletionSource 생성자에 전달된 인수는 TaskContinuationOptions 열거형 대신 TaskCreationOptions 열거형이어야 합니다.

속성
규칙 ID CA2247
타이틀 TaskCompletionSource 생성자로 전달된 인수는 TaskContinuationOptions 열거형이 아닌 TaskCreationOptions 열거형이어야 합니다.
범주 사용 현황
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 경고로

원인

System.Threading.Tasks.TaskCreationOptions 열거형이 아니라 System.Threading.Tasks.TaskContinuationOptions 열거형 값으로 System.Threading.Tasks.TaskCompletionSource를 생성합니다. System.Object.ReferenceEquals 메서드를 사용하여 하나 이상의 값 형식이 같은지 테스트합니다.

규칙 설명

TaskCompletionSource 형식에는 System.Threading.Tasks.TaskCreationOptions 열거형 값을 허용하는 생성자와 Object를 허용하는 다른 생성자가 있습니다. 실수로 System.Threading.Tasks.TaskCreationOptions 열거형 값 대신 System.Threading.Tasks.TaskContinuationOptions 열거형 값을 전달하면 Object 기반 생성자가 호출됩니다. 즉, 컴파일하고 실행되지만 의도한 동작은 포함하지 않습니다.

위반 문제를 해결하는 방법

위반 문제를 해결하려면 System.Threading.Tasks.TaskContinuationOptions 열거형 값을 해당하는 System.Threading.Tasks.TaskCreationOptions 열거형 값으로 바꿉니다.

    // Violation
    var tcs = new TaskCompletionSource<int>(TaskContinuationOptions.RunContinuationsAsynchronously);

    // Fixed
    var tcs = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);

경고를 표시하지 않는 경우

이 규칙을 위반하는 경우 거의 항상 호출 코드의 버그를 강조 표시합니다. 즉, 코드는 개발자가 의도한 대로 동작하지 않고 TaskCompletionSource가 사실상 지정된 옵션을 무시합니다. 경고를 표시하지 않는 것이 안전한 유일한 경우는 개발자가 실제로 개체 상태 인수로 boxed System.Threading.Tasks.TaskContinuationOptions 를 전달하려는 경우입니다. TaskCompletionSource

경고 표시 안 함

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

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

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

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

이 전체 규칙 범주를 사용하지 않도록 설정하려면 구성 파일에서 범주의 심각도를 none으로 설정합니다.

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Usage.severity = none

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

참고 항목