次の方法で共有


Enlistment.Done メソッド

定義

トランザクション参加要素が作業を完了したことを示します。

public:
 void Done();
public void Done ();
member this.Done : unit -> unit
Public Sub Done ()

注釈

トランザクションコミットの最終フェーズでは、トランザクションをコミットするかInDoubtロールバックするかに応じて、トランザクション マネージャーが参加者のメソッドをCommitRollback呼び出します。 リソース マネージャーは、トランザクションを完了するために必要な作業を実行し、パラメーターでメソッドを呼び出 Done して完了したことをトランザクション マネージャーに通知する enlistment 必要があります。

リソース マネージャーが永続的に参加しているが、メソッドの呼び出し Done によって応答しない場合、トランザクション マネージャーは、リソース マネージャーがそれぞれの通知呼び出しを受信したかどうか不明です。 そのため、トランザクション マネージャーは応答を待機し続け、このトランザクションに関連する情報を保持します。 呼び出されない場合 Done 、この情報はメモリまたはシステム全体のリソースに無期限に保持されます。 これにより、リソースを再利用できなくなります。 分散トランザクションの場合、最終的に MSDTC ログがいっぱいになり、MSDTC プロセスが停止する可能性があります。 トランザクションが管理される System.Transactions場合、リソース マネージャーのプロセスのメモリ消費量が徐々に増加し続けます。 そのため、リソース マネージャーが準備作業を Done 完了したら、メソッドを呼び出す必要があります。

参加リストは、準備フェーズで呼び出 Done される前に、いつでもメソッドを呼び出 Prepared すことができます。 そうすることで、参加は読み取り専用の投票を行います。つまり、トランザクションに対するコミットに投票しますが、最終的な結果を受け取る必要はありません。 このメソッドが呼び出されると、参加している参加者はトランザクション マネージャーからそれ以上の通知を受け取らないことに注意してください。

適用対象

こちらもご覧ください