Мы исследуем шаблон кодирования на C #, в котором мы хотели бы использовать предложение 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
завершено нормально.