void MethodA()
{
Monitor.Enter(this);
if(someCondition)
{
Monitor.Exit(this);
// This point
MethodB();
}
else
{
// Set some values only
Monitor.Exit(this);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我有上面的方法可以在多线程中调用:
//This pointMonitor.Enter当线程1仍在时,另一个线程进入//This pointMethodB执行吗?如果是,是否有办法MethodB执行.我需要MethodA在执行前释放,MethodB()因为我不能等到发布之前MethodB完成MethodA.另外,我无法MethodB在新线程中开始.
抛开使用'this'作为锁的问题(不好的做法,因为它公开地暴露了锁),这个表单更干净,更安全(如果抛出异常则释放锁):
void MethodA()
{
bool condition;
lock(this)
{
condition = someCondition;
if(!condition)
{
// Set some values only
}
}
if (condition)
MethodB();
}
Run Code Online (Sandbox Code Playgroud)
要回答您的具体问题,此代码和原始代码都将执行MethodB,即使其他东西获得了锁定.