CA2008: TaskScheduler를 전달하지 않고 작업을 만들지 마세요.
속성 | 값 |
---|---|
규칙 ID | CA2008 |
타이틀 | TaskScheduler를 전달하지 않은 상태에서 작업을 만들지 않음 |
범주 | 신뢰성 |
수정 사항이 주요 변경인지 여부 | 주요 변경 아님 |
.NET 8에서 기본적으로 사용 | 아니요 |
원인
작업 만들기 또는 연속 작업에서 TaskScheduler 매개 변수를 지정하지 않는 메서드 오버로드를 사용합니다.
규칙 설명
다음 .NET 작업 만들기 및 연속 메서드에는 TaskScheduler 인스턴스를 지정하거나 생략할 수 있는 오버로드가 있습니다.
항상 명시적 TaskScheduler 인수를 지정하여 기본 Current 값을 사용하지 않도록 합니다. 이러한 동작은 호출자가 정의하며 런타임에 달라질 수 있습니다. Current는 해당 스레드에서 현재 실행 중인 모든 Task와 연관된 스케줄러를 반환합니다. 이러한 작업이 없으면 스레드 풀을 나타내는 Default를 반환합니다. Current를 사용하면 스레드 풀에 작업을 만들기 위한 것이지만 UI 스레드로 다시 돌아갈 때까지 대기하는 경우처럼 상황에 따라 교착 상태 또는 UI 응답성 문제가 발생할 수 있습니다.
자세한 내용 및 자세한 예제는 .New TaskCreationOptions and TaskContinuationOptions in .NET Framework 4.5(.NET Framework 4.5의 새 TaskCreationOptions 및 TaskContinuationOptions)를 참조하세요.
참고 항목
VSTHRD105 - Avoid method overloads that assume TaskScheduler.Current(VSTHRD105 - TaskScheduler.Current를 가정하는 메서드 오버로드를 사용하지 마세요)는 Microsoft.VisualStudio.Threading.Analyzers 패키지에 구현된 유사한 규칙입니다.
위반 문제를 해결하는 방법
위반 문제를 해결하려면 TaskScheduler를 사용하는 메서드 오버로드를 호출하고 Default 또는 Current를 명시적으로 전달하여 의도를 명확하게 합니다.
경고를 표시하지 않는 경우
이 경고는 주로 코드가 임의 환경에서 실행될 수 있는 라이브러리, 코드가 환경 또는 메서드의 호출자가 호출되거나 대기되는 방법에 대해 가정할 수 없는 라이브러리를 대상으로 합니다. 라이브러리 코드가 아닌 애플리케이션 코드를 나타내는 프로젝트에 대해서는 경고를 표시하지 않는 것이 적절할 수 있습니다.
경고 표시 안 함
단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.
#pragma warning disable CA2008
// The code that's violating the rule is on this line.
#pragma warning restore CA2008
파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none
으로 설정합니다.
[*.{cs,vb}]
dotnet_diagnostic.CA2008.severity = none
자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.
참고 항목
- New TaskCreationOptions and TaskContinuationOptions in .NET Framework 4.5(.NET Framework 4.5의 새 TaskCreationOptions 및 TaskContinuationOptions)
- VSTHRD105 - Avoid method overloads that assume TaskScheduler.Current(VSTHRD105 - TaskScheduler.Current를 가정하는 메서드 오버로드를 사용하지 마세요)
- CA2007: 작업을 직접 기다리지 마세요.
- 안정성 규칙
.NET