| 속성 | 값 |
|---|---|
| 규칙 ID | CA2247 |
| 제목 | TaskCompletionSource 생성자에 전달되는 인수는 TaskCreationOptions 열거형이어야 하며, TaskContinuationOptions 열거형이 아니어야 합니다. |
| 범주 | 사용 현황 |
| 수정 사항이 호환성을 깨뜨리는지 여부 또는 무중단인지 여부 | 주요 변경 아님 |
| .NET 10에서 기본적으로 사용하도록 설정 | 경고로서 |
| 적용 가능한 언어 | C# 및 Visual Basic |
원인
System.Threading.Tasks.TaskCompletionSource를 System.Threading.Tasks.TaskCreationOptions 열거형 값이 아니라 System.Threading.Tasks.TaskContinuationOptions 열거형 값으로 생성합니다.
System.Object.ReferenceEquals 메서드를 사용하여 하나 이상의 값 형식이 같은지 테스트합니다.
규칙 설명
TaskCompletionSource 형식에는 System.Threading.Tasks.TaskCreationOptions 열거형 값을 허용하는 생성자와 Object를 허용하는 다른 생성자가 있습니다. 실수로 System.Threading.Tasks.TaskContinuationOptions 열거형 값 대신 System.Threading.Tasks.TaskCreationOptions 열거형 값을 전달하면 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
자세한 내용은 코드 분석 경고를 표시하지 않는 방법을 참조 하세요.
참고하기
.NET