lock
문 및 스레드 동기화와 관련된 몇 가지 오류가 있습니다.
- CS0185: 'type'이 lock 문에서 요구하는 참조 형식이 아닙니다.
- CS1996: lock 문의 본문에서 기다릴 수 없습니다.
- CS9217: 'System.Threading.Lock' 형식의 값에 대한 lock 문은 비동기 메서드 또는 비동기 람다 식에서 사용할 수 없습니다.
또한 컴파일러는 lock
문 및 스레드 동기화와 관련하여 다음과 같은 경고를 생성할 수 있습니다.
- CS9216: 다른 형식으로 변환된
System.Threading.Lock
형식의 값은lock
문에서 의도하지 않은 모니터 기반 잠금을 사용할 가능성이 높습니다.
- CS0185: 'type'이 lock 문에서 요구하는 참조 형식이 아닙니다.
- CS1996: lock 문의 본문에서 기다릴 수 없습니다.
- CS9217: 'System.Threading.Lock' 형식의 값에 대한 lock 문은 비동기 메서드 또는 비동기 람다 식에서 사용할 수 없습니다.
이러한 오류는 사용자의 코드가 lock
문과 관련된 규칙을 위반했음을 나타냅니다.
lock
대상 개체는 참조 형식이어야 합니다. 값 형식은 허용되지 않습니다.await
식은lock
문의 범위에서 사용할 수 없습니다.lock
문은async
메서드 또는 람다 식과 함께 사용할 수 없습니다. 이 오류의 경우 잠긴 개체 형식을 다른 형식으로 바꿀 수 있습니다.lock
문은 Monitor API를 사용합니다.
lock
문의 규칙을 따르도록 코드를 업데이트해야 합니다.
- CS9216: 다른 형식으로 변환된
System.Threading.Lock
형식의 값은lock
문에서 의도하지 않은 모니터 기반 잠금을 사용할 가능성이 높습니다.
C# 13부터 lock
은 대상 개체가 System.Threading.Lock
개체일 때 특수 코드를 생성합니다. Lock
개체를 사용할 때 컴파일러는 이 경고를 생성하지만 코드는 해당 형식을 다른 것으로 변환합니다. 따라서 컴파일러는 Lock
형식에 특정한 잠금 코드가 아닌 일반 잠금 코드를 생성합니다. 예시:
object lockObject = new System.Threading.Lock();
lock (lockObject) // CS9216
{
// .. Your code
}
변수나 식이 Lock
개체의 형식을 나타내는지 확인해야 합니다.
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET 피드백
.NET 은(는) 오픈 소스 프로젝트입니다. 다음 링크를 선택하여 피드백을 제공해 주세요.