以下代码将解除锁定。不会有问题的。幕后锁语句的作用是try finally
lock(locker) { throw new Exception(); }
在C#5.0规范中可以看到更多信息:
lock形式的声明
lock (x) ...
wherex是引用类型的表达式,恰好等于
bool __lockWasTaken = false; try { System.Threading.Monitor.Enter(x, ref __lockWasTaken); ... } finally { if (__lockWasTaken) System.Threading.Monitor.Exit(x); }
除了那只x被评估一次。