一个.在哪些情况下此代码失败:
try
{
Monitor.Enter(someObj);
//Do something important
}
finally
{
Monitor.Exit(someObj);
}
Run Code Online (Sandbox Code Playgroud)
而且这段代码不会失败:
Monitor.Enter(someObj);
try
{
//Do something important
}
finally
{
Monitor.Exit(someObj);
}
Run Code Online (Sandbox Code Playgroud)
湾 当您没有使用using语句包装临界区时,您使用哪一个
谢谢
好吧,lock(someObj)会更简单,并且在可用时将使用Monitor.NET 4中的新重载.
在.NET 4中,首选以下内容(emph:lock将为您执行此操作):
bool lockTaken = false;
try
{
Monitor.Enter(lockObj, ref lockTaken);
// do something important
}
finally
{
if (lockTaken) Monitor.Exit(lockObj);
}
Run Code Online (Sandbox Code Playgroud)
为什么,请参阅Eric Lippert的博客
但否则:第二个; 否则,如果Enter调用失败(任何方法调用都可能失败),则尝试Exit使用您没有的锁.
| 归档时间: |
|
| 查看次数: |
334 次 |
| 最近记录: |