Looking for c# Keywords? Try Ask4Keywords

C# Language Исключение исключения в инструкции блокировки


пример

Следующий код освободит блокировку. Проблем не будет. За кулисами оператор блокировки работает как try finally

lock(locker)
{
    throw new Exception();
}

Больше можно увидеть в спецификации C # 5.0 :

Оператор lock формы

lock (x) ...

где x - выражение ссылочного типа , точно эквивалентно

bool __lockWasTaken = false;
try {
    System.Threading.Monitor.Enter(x, ref __lockWasTaken);
    ...
}
finally {
    if (__lockWasTaken) System.Threading.Monitor.Exit(x);
}

за исключением того, что x оценивается только один раз.