2016-08-03 11 views
8

Mam kod, który można wywołać z poziomu lub poza blokadą. Muszę robić rzeczy, gdy jestem w zamku. Sam kod nie ma wiedzy o tym, skąd jest wywoływany. Potrzebuję czegoś takiego:Jak sprawdzić, czy obecny kod jest "wewnątrz" blokady?

lock (MyLock) { 
    if (INSIDE_LOCK) ... 
} 

Wiem, że to brzmi dziwnie i źle, ale potrzebuję tego dla problemów ze zgodnością. W przeciwnym razie będę musiał przepisać dużo kodu, co byłoby ryzykowne, ponieważ nie mam żadnych testów.

Odpowiedz

7

Spróbuj Monitor klasa:

if (Monitor.IsEntered(MyLock)) {...} 

Rejestracja (patrz komentarz René Vogt poniżej) lock

lock(MyLock) { 
    ... 
} 

jest w rzeczywistości cukier syntaktyczny dla

Monitor.Enter(MyLock); 

try { 
    ... 
} 
finally { 
    Monitor.Leave(MyLock); 
} 
+4

jakieś wytłumaczenie o 'zamkiem (MyLock) 'będący tylko syntaktycznym cukrem dla' Monitor.Enter (MyLock) '+' try/finally' + 'Monitor.Leave (M yLock) 'może poprawić tę jedną linię odpowiedzi. –

Powiązane problemy