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