Как правильно написать когда операция требует одновременно и то и другое?
try
{
lock(locker)
{
....
}
}
catch(...)
{
...
}
или так
lock(locker)
{
try
{
...
}
catch(...)
{
...
}
}
И как быть в случае возникновения исключения, если оно будет залочено?
задан 12 дек. 2016 в 16:16
Bulson
9,4712 золотых знака18 серебряных знаков33 бронзовых знака
1 ответ 1
На SO настоятельно не рекомендуют использовать вместе c lock конструкцию try-catch. А советуют поступать так:
lock(whatever)
{
try
{
MakeAMess();
}
finally
{
CleanItUp();
// Либо доводим операцию до конца, либо откатываем в прежнее состояние
}
}
Там пишут, что выбрасывание исключения в lock нарушает саму суть ради чего существует этот самый lock. Поэтому если возникло исключение есть два варианта:
- Прибить процесс совсем с помощью
Environment.FailFast() - Либо, если это возможно, откатить в прежнее состояние, до
lock.
В оригинале можно ознакомиться здесь.
ответ дан 12 дек. 2016 в 18:22
Bulson
9,4712 золотых знака18 серебряных знаков33 бронзовых знака
Начните задавать вопросы и получать на них ответы
Найдите ответ на свой вопрос, задав его.
Задать вопросlang-cs
lock- это сокращенная записьMonitor.Enter/Exitсtry-finaly. msdn.microsoft.com/en-us/library/c5kehkcz.aspx