Dispose()
「using」ボディが正常に終了したか例外で終了したかによってメソッドが異なる処理を行う特別なクラスで「using」節を使用したい C# のコーディング パターンを調査しています。
私の理解では、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