단순히 모니터링하는 방법
-
05-07-2019 - |
문제
나는 일을 더 간단하게 만들려고 노력하고 있습니다. 내 코드는 다음과 같습니다.
If Threading.Monitor.TryEnter(syncRoot) Then
Try
'do something
Finally
Threading.Monitor.Exit(syncRoot)
End Try
Else
'do something else
End If
이것은 소음 측면에서 ReaderWriterLock보다 더 나쁩니다. C# 또는 VB를 사용할 수 있으므로 중 하나에 신청하는 답변을 환영합니다.
해결책
대의원을 사용 하시겠습니까?
예를 들어
public bool TryEnter(object lockObject, Action work)
{
if (Monitor.TryEnter(lockObject))
{
try
{
work();
}
finally
{
Monitor.Exit(lockObject);
}
return true;
}
return false;
}
다른 팁
이것은 당신과 매우 유사합니다 마지막 게시물, 그리고 나는 비슷한 대답을 기대할 것입니다. 유일한 중요한 차이점은 타임 아웃이 실패하면 메소드에서 "널"을 반환 할 수 있다는 것입니다. 그러면 "dispose ()"이 호출되지 않으면 값을 쉽게 확인할 수 있습니다.
using(var token = GetLock(syncLock, timeout)) {
if(token != null) { ... }
}
유일한 진짜 결함은 반드시 "개체"(또는 "t : class")에 확장 방법을 추가하고 싶지는 않다는 것입니다.
존 스키트 과거에 이것을 보았습니다. 볼만한 가치가 있습니다.
제휴하지 않습니다 StackOverflow