.NET4, monitor.enter (lockobject, arciredLock)
-
06-07-2019 - |
문제
.NET4에서 Monitor.Enter (Object) 쓸모없는 것으로 표시됩니다.
[ObsoleteAttribute("This method does not allow its caller to reliably release the lock. Please use an overload with a lockTaken argument instead.")]
public static void Enter(
Object obj
)
그리고 새로운 방법이 있습니다 monitor.enter (lockobject, arciredLock) 이 사용법으로 :
bool acquiredLock = false;
try
{
Monitor.Enter(lockObject, ref acquiredLock);
// Code that accesses resources that are protected by the lock.
}
finally
{
if (acquiredLock)
{
Monitor.Exit(lockObject);
}
}
나는 이런 식으로 그렇게했다 :
Monitor.Enter(lockObject);
try
{
// Code that accesses resources that are protected by the lock.
}
finally
{
Monitor.Exit(lockObject);
}
잘못 됐나 ? 왜요 ? 아마도 입력 후에도 시도하기 전에 interupt가 있을까요?
Eamon Nerbonne이 물었을 때 : Monitor.exit 바로 직전에 마지막으로 비동기 예외가 있으면 어떻게 되나요?
대답 : ThreadabortException
이 예외가 제기되면 런타임은 스레드를 끝내기 전에 모든 최종 블록을 실행합니다.
해결책
질문이 끝날 때 바로 제안하는 것처럼 문제는 비동기 예외 전화 후에 던질 수 있습니다 Monitor.Enter
그러나 당신이 입력하기 전에 try
차단하다.
새로운 일을하는 방법은 어떤 일이 일어나 든, 마지막으로 블록을 치고 잠금 장치를 해제 할 수 있는지 확인합니다. 만약에 당신은 그것을 얻었습니다. (만약 당신은 그것을 획득 할 수 없습니다 Monitor.Enter
예를 들어 예외를 던집니다.)
IIRC, 이것은 새로운 행동입니다 lock
.NET 4.0을 타겟팅 할 때 키워드.
제휴하지 않습니다 StackOverflow