다음을 통해 공유


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 할 수 있습니다. 이렇게 함으로써 인리스트먼트는 읽기 전용 투표를 캐스팅합니다. 즉, 트랜잭션에 대한 커밋을 투표하지만 최종 결과를 받을 필요는 없습니다. 이 메서드가 호출된 후에는 참여 참가자가 트랜잭션 관리자로부터 더 이상 알림을 받지 못합니다.

적용 대상

추가 정보