取消异步调用

如果调用对象实现 ICancelMethodCalls 接口,客户端可以取消正在进行的异步调用。 对于使用标准封送的对象,ICancelMethodCalls 始终可用于封送调用。 对于使用自定义封送的对象或同一单元中的服务器对象调用,仅当调用对象实现 ICancelMethodCalls 时,此功能才可用。

从调用 Begin_ 方法直到 Finish_ 方法返回为止,客户端可以随时取消调用。 如果客户端在调用 Finish_ 方法之前取消调用,则必须调用 Finish_ 方法来清理调用对象的状态。 在客户端完成此操作之前,对调用对象上任何 Begin_ 方法的任何调用都将返回 RPC_E_CALL_PENDING。

取消异步调用

  1. 查询 ICancelMethodCalls 的调用对象。

  2. 调用 ICancelMethodCalls::Cancel,然后调用 Release 以释放 QueryInterface 调用在步骤 1 中获得的指针。

  3. 如果客户端尚未调用 Finish_ 方法,请立即调用该方法。

不能保证服务器实际停止调用执行。 如果客户端的后续工作取决于调用可能已或可能尚未更改的某些服务器状态,客户端应在继续之前确定该状态。

进行异步调用