Мы изучаем шаблон кодирования в С#, в котором мы хотели бы использовать предложение "using" со специальным классом, метод Dispose()
выполняет разные действия в зависимости от того, было ли нормально использовано тело "using" с исключением.
Насколько я понимаю, CLR отслеживает, что текущее исключение обрабатывается до тех пор, пока оно не будет использовано обработчиком "catch". Однако не совсем ясно, каким образом эта информация каким-либо образом предоставляется для доступа к коду. Знаете ли вы, и если да, как получить к нему доступ?
Например:
using (var x = new MyObject())
{
x.DoSomething();
x.DoMoreThings();
}
class MyObject : IDisposable
{
public void Dispose()
{
if (ExceptionIsBeingHandled)
Rollback();
else
Commit();
}
}
Это выглядит почти как System.Transactions.TransactionScope
, за исключением того, что успех/сбой не определяется вызовом x.Complete()
, а скорее зависит от того, было ли тело using
завершено нормально.