void MethodA()
{
Monitor.Enter(this);
if(someCondition)
{
Monitor.Exit(this);
// This point
MethodB();
}
else
{
// Set some values only
Monitor.Exit(this);
}
}
Если у меня есть вышеупомянутый метод, который может быть вызван в нескольких нитей:Надлежащее использование Monitor.Exit
- Предположим, поток 1 находится в
//This point
- Другой поток входит
Monitor.Enter
в то время как поток 1 по-прежнему на//This point
- Будет ли эта остановка
MethodB
быть выполненной? Если да, есть способ получитьMethodB
для выполнения.
мне нужно освободить MethodA
перед выполнением MethodB()
, потому что я не могу ждать, чтобы завершить MethodB
перед выпуском MethodA
. Кроме того, я не могу запустить MethodB
в новом потоке.
Если исключение произойдет, блокировка никогда не будет выпущена, используйте ее только в 'try .. finally' – Andrey