Monitor.Enter и Monitor.Exit в разных потоках

Монитор.Вводи Монитор.Exitпредназначены для вызова из того же потока. Но что, если мне нужно снять блокировку в потоке, отличном от полученного?

Например: есть общий ресурс и асинхронная операция, использующая этот ресурс. Операция начинается с BeginOperationи получает блокировку общего ресурса. Также существует метод EndOperation, который снимает блокировку. EndOperationобычно вызывается в другом потоке из обратного вызова, поэтому я не могу вызвать Monitor.Exitв методе EndOperation. Каков наилучший подход в этом случае? Будет ли хорошим решением повторная проверка блокировки с помощью AutoResetEventвместо Monitor?

9
задан eigenein 12 June 2012 в 17:29
поделиться