분산 및 웹 기반 애플리케이션이 도입되면 일부 메서드 호출은 반환하는 데 허용되는 시간이 오래 걸릴 수 있습니다. 네트워크 연결의 대기 시간이 높거나, 서버 컴퓨터가 많은 클라이언트에 서비스를 제공하거나, 서버 구성 요소가 멀티미디어 파일과 같은 많은 양의 데이터를 전달할 수 있습니다. 사용자는 너무 오래 걸리는 요청을 취소할 수 있어야 하며, 애플리케이션은 취소 요청을 처리하고 다른 작업을 계속할 수 있어야 합니다. COM에서 IMessageFilter 인터페이스를 사용하여 단일 스레드 아파트에서 발생하는 보류 중인 호출을 취소할 수 있습니다.
호출이 마샬링되면 프록시는 ICancelMethodCalls 인터페이스를 구현하는 취소 개체를 만듭니다. 취소 개체는 호출이 보류 중인 스레드와 모두 연결됩니다.
보류 중인 호출을 취소하기 위해 클라이언트는 취소 개체를 통해 취소 요청을 전달합니다. 이 개체는 호출이 취소되었음을 서버 개체에 알리는 세부 정보를 처리합니다. 호출된 메서드가 반환되지 않은 경우 서버 개체는 취소 요청을 검색할 때 할당한 프로그램 리소스를 정리하고 적절한 HRESULT 값을 반환하여 호출 실행을 취소했음을 클라이언트에 알립니다. 호출된 메서드가 이미 반환된 경우 취소 개체가 클라이언트에 알립니다. 두 경우 모두 클라이언트 스레드가 차단 해제되어 처리를 계속할 수 있습니다.
서버 개체가 취소 요청에 응답하는 방법은 서버 구현자의 재량에 따라 결정되지만 클라이언트의 호출 스레드는 항상 차단 해제되며 서버가 전달하려고 시도하는 결과를 무시합니다. 취소 개체는 현재 실행 중인 메서드를 취소하도록 요청하는 수단을 제공하지만 서버 개체가 호출 처리를 중지한다는 보장은 없습니다. 예를 들어 호출이 이미 반환되었거나 서버 개체가 취소 개체를 지원하지 않을 수 있습니다.
COM은 자동으로 표준 마샬링을 사용하는 클라이언트 개체 및 인터페이스에 대한 취소 개체의 표준 구현을 제공합니다. 사용자 지정 마샬링을 사용하는 개체 및 인터페이스의 경우 사용자 고유의 취소 개체를 구현해야 합니다.
현재 취소 개체는 동기 호출만 처리합니다.
관련 항목