我们正在研究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
体是否正常退出。