문제

.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을 타겟팅 할 때 키워드.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top