Попробуйте и заблокируйте вопрос
У меня вопрос.. это нормально, если у меня есть что-то вроде этого:
try
{
lock(programLock)
{
//some stuff 1
}
}
catch(Exception ex) { //stuff 2 }
Мне интересно, если "some stuff 1"
вызывает исключение, остается ли programLock
заблокировано?
Ответы
Ответ 1
Нет, блокировка будет отпущена, блокировка примерно эквивалентна этому:
try
{
Monitor.Enter(programLock);
// some stuff 1
}
finally
{
Monitor.Exit(programLock);
}
(Значение, если выбрано исключение, Monitor.Exit
будет вызываться автоматически при выходе из области действия оператора блокировки)
Ответ 2
Lock()
- это не что иное, как
try
{
Monitor.Enter(...);
}
finally
{
Monitor.Exit(....);
}
Итак, он уже позаботится об этом.
Ответ 3
Из msdn documentation
"... lock или SyncLock гарантирует, что основной монитор выпущен, даже если защищенный код исключение".
Примечание. Вы можете создать свои собственные блоки исключений для произвольных действий с помощью используя блоки,.net-версию RAII.
Ответ 4
Нет. оставляя фиксаторы всегда разблокированными.
Ответ 5
Нет, он не останется заблокированным.
"Закрывающая скобка" блокировки - это в основном предложение finally. Exit.
См. этот связанный с этим вопрос StackOverflow.
Заблокирован ли заблокированный объект, если в нем есть исключение?