Какова наилучшая практика обработки исключений в пределах обработка исключений?Обработка исключений при обработке исключений
Я нахожу себя работающим над существующей системой C# (Framework 4.0), которая использует пользовательские объекты в catch и, наконец, блокирует на большинстве уровней Application Server.
Рассмотрим следующую надрезается версию метода в этом коде:
public void DoSomeStuff(string sGUID)
{
try
{
// Foo
}
catch (Exception oEx)
{
oExceptions.Add(oEx);
if (oDBConn.NumberOfActiveTrans > 0)
{
oDBConn.Rollback();
}
}
finally
{
oDBConn.DeleteLocksByGUID(sGUID);
}
}
я мог бы быть чрезмерно параноик, но я считаю себя очень беспокоюсь о возможных необработанных исключений, которые могут произойти с ними.
Таким образом, было бы приемлемо использовать следующую обновленную версию или есть лучший способ выполнить одно и то же?
public void DoSomeStuff(string sGUID)
{
try
{
// Foo
}
catch (Exception oEx)
{
oExceptions.Add(oEx);
try
{
if (oDBConn.NumberOfActiveTrans > 0)
{
oDBConn.Rollback();
}
}
catch (Exception oEEx)
{
oExceptions.Add(oEEx);
}
}
finally
{
try
{
oDBConn.DeleteLocksByGUID(sGUID);
}
catch (Exception oFEx)
{
oExceptions.Add(oFEx);
}
}
}
Я бы обработал откат транзакций в базе данных (например, с помощью хранимой процедуры для обновления/вставки данных). Таким образом, вам не нужно * 'try' откатывать транзакцию внутри блока' catch', когда вставка/обновление не выполняется в первом блоке 'try' *. (o.O) –