Enlistment.Done メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
トランザクション参加者が作業を完了したことを示します。
public:
void Done();
public void Done();
member this.Done : unit -> unit
Public Sub Done ()
注釈
トランザクションコミットの最終フェーズでは、トランザクションマネージャーは、トランザクションをコミットするかロールバックするかに応じて、参加者の Commit、 Rollback 、または InDoubt のいずれかのメソッドを呼び出します。 リソース マネージャーは、トランザクションを完了するために必要な作業を実行し、Done パラメーターで enlistment メソッドを呼び出して完了したことをトランザクション マネージャーに通知する必要があります。
リソース マネージャーが永続的に参加しているが、 Done メソッドを呼び出しても応答しない場合、トランザクション マネージャーは、リソース マネージャーがそれぞれの通知呼び出しを受信したかどうかわからない。 そのため、トランザクション マネージャーは応答を待機し続け、このトランザクションに関連する情報を保持します。 Doneが呼び出されない場合、この情報はメモリまたはシステム全体のリソースに無期限に保持されます。 これにより、リソースを再利用できなくなります。 分散トランザクションの場合、最終的に MSDTC ログがいっぱいになり、MSDTC プロセスが停止する可能性があります。 System.Transactionsによって管理されるトランザクションの場合、リソース マネージャーのプロセスのメモリ消費量が段階的かつ継続的に増加します。 そのため、リソース マネージャーが準備作業を完了したら、 Done メソッドを呼び出す必要があります。
参加リストは、準備フェーズでDoneを呼び出す前に、いつでも Prepared メソッドを呼び出すことができます。 そうすることで、参加は読み取り専用の投票を行います。つまり、トランザクションに対するコミットに投票しますが、最終的な結果を受け取る必要はありません。 このメソッドが呼び出されると、参加している参加者はトランザクション マネージャーからそれ以上の通知を受け取らなくなります。