void MethodA()
{
Monitor.Enter(this);
if(someCondition)
{
Monitor.Exit(this);
// This point
MethodB();
}
else
{
// Set some values only
Monitor.Exit(this);
}
}
如果我有可以在多线程中调用的上述方法:
//This point
Monitor.Enter
而线程 1 仍在 //This point
MethodB
的执行吗?如果是,是否有办法让 MethodB
执行。 我需要在执行
MethodA
之前释放 MethodB()
,因为在释放 MethodB
之前我不能等待 MethodA
完成。另外,我无法在新线程中启动 MethodB
。 最佳答案
因为 someCondition 没有作为参数传递,所以我只能假设 someCondition 可以随时更改(可能是类的实例变量)。所以,我会这样写代码:
void MethodA()
{
if (someCondition)
{
bool conditionReached = false;
Monitor.Enter(this);
try
{
if (someCondition)
{
conditionReached = true;
}
}
finally
{
Monitor.Exit(this);
}
if (conditionReached)
{
MethodB();
}
}
}
如果没有,那么在本地声明
condition
的先前答案将适合您。关于c# - 适当使用Monitor.Exit,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4089163/