AFAIK,这两个版本之间存在差异lock
。
框架 4 增加了一项检查监视器输入期间是否存在异常(如内存不足异常)
并且有一个lockTaken
标志指示是否应该(在finally
子句中)释放锁(由于try
子句中的代码失败)。
就像是
bool lockTaken = false;
try
{
Monitor.Enter (lockObj, ref lockTaken);
...
}
finally { if (lockTaken) Monitor.Exit (lockObj); }
(非常类似于using
代码(处置...))
但是通过反射器观看我看到完全不同的东西:
[SecuritySafeCritical]
public static void Enter(object obj, ref bool lockTaken)
{
if (lockTaken)
{
throw new ArgumentException(Environment.GetResourceString("Argument_MustBeFalse"), "lockTaken");
}
ReliableEnter(obj, ref lockTaken);
}
最后尝试的模式在哪里?
我错过了什么?