You can extend IDisposable
with method Complete
and use pattern like that:
using (MyWrapper wrapper = new MyWrapper())
{
throw new Exception("Bad error.");
wrapper.Complete();
}
If an exception is thrown inside the using
statement Complete
will not be called before Dispose
.
If you want to know what exact exception is thrown, then subscribe on AppDomain.CurrentDomain.FirstChanceException
event and store last thrown exception in ThreadLocal<Exception>
variable.
Such pattern implemented in TransactionScope
class.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…