取消異步呼叫

如果呼叫對象實 作 ICancelMethodCalls 介面,用戶端可以取消進行中的異步呼叫。 對於使用標準封送處理的物件, ICancelMethodCalls 一律可用於封送處理呼叫。 對於使用自定義封送處理的物件,或針對相同 Apartment 中伺服器物件的呼叫,只有在呼叫對象實作 ICancelMethodCalls 時,才能使用此功能。

用戶端可以隨時取消呼叫,從呼叫Begin_方法直到Finish_方法傳回為止。 如果用戶端在呼叫 Finish_ 方法之前取消呼叫,則必須呼叫 Finish_ 方法來清除呼叫物件的狀態。 在用戶端完成之前,呼叫物件上任何Begin_方法的呼叫都會傳回RPC_E_CALL_PENDING。

取消異步呼叫

  1. 查詢 ICancelMethodCalls呼叫物件。

  2. 呼叫 ICancelMethodCalls::Cancel,然後呼叫 Release 以釋放步驟 1 中 QueryInterface 呼叫取得的指標。

  3. 如果用戶端尚未呼叫 Finish_ 方法,請立即呼叫它。

不保證伺服器實際上已停止執行呼叫。 如果客戶端的進一步工作取決於呼叫可能或可能未變更的某些伺服器狀態,客戶端應該先判斷該狀態,然後再繼續。

進行異步呼叫