一个。在这种情况下,此代码失败:
try
{
Monitor.Enter(someObj);
//Do something important
}
finally
{
Monitor.Exit(someObj);
}
此代码不会失败:
Monitor.Enter(someObj);
try
{
//Do something important
}
finally
{
Monitor.Exit(someObj);
}
湾当您没有使用using语句包装临界区时使用哪一个
由于
答案 0 :(得分:5)
好吧,lock(someObj)
会更简单,并且可以在.NET 4中使用新的Monitor
重载。
在.NET 4中,首选以下内容(emph:lock
将为您执行此操作):
bool lockTaken = false;
try
{
Monitor.Enter(lockObj, ref lockTaken);
// do something important
}
finally
{
if (lockTaken) Monitor.Exit(lockObj);
}
为什么,请参阅Eric Lippert's blog
但不然:第二个;否则,如果Enter
调用失败(任何方法调用失败),则您尝试Exit
锁定您没有。