rpcAsyncCancelCall 函数 (rpcasync.h)

客户端调用 RpcAsyncCancelCall 函数以取消异步调用。

语法

RPC_STATUS RpcAsyncCancelCall(
  PRPC_ASYNC_STATE pAsync,
  BOOL             fAbort
);

参数

pAsync

指向包含异步调用信息的 RPC_ASYNC_STATE 结构的指针。

fAbort

如果 为 TRUE,则立即取消调用。 如果 为 FALSE,请等待服务器完成调用。

返回值

含义
RPC_S_OK
已处理取消请求。
RPC_S_INVALID_ASYNC_HANDLE
异步句柄无效。
 
注意 有关有效错误代码的列表,请参阅 RPC 返回值
 

注解

客户端可以通过两种方式请求取消异步调用:中止 和非 中止。 在中止取消 (fAbortCallTRUE) ,RpcAsyncCancelCall 函数会向服务器和客户端发送取消通知,异步调用将立即取消,而无需等待服务器的响应。 请注意,在多线程应用程序中,只有在发起调用的线程成功从该线程返回后,客户端才能取消异步调用。 这是确保调用在发出时同步失败后不会被另一个线程异步取消所必需的。 通常,如果异步调用同步失败,则不应异步取消。 如果可以在不同的线程上发出和取消调用,则客户端应用程序必须确保此行为。

服务器通过调用 RpcServerTestCancel 检查来自客户端的取消请求。 根据发出取消请求时的调用状态以及服务器检查取消的频率,调用可能会正常完成,也可能不正常完成。 客户端应用程序必须调用 RpcAsyncCompleteCall 才能完成调用,并且返回值将指示调用是已完成、失败还是已取消。 但是,在调用 RpcAsyncCompleteCall 之前,客户端仍必须等待原始调用完成。

在非中止取消 (fAbortCallFALSE) RpcAsyncCancelCall 函数通知服务器取消,客户端等待服务器完成调用。 没有内置的超时机制。 如果希望调用超时,客户端应首先使用自己的超时机制发出非中止取消。 如果调用超时,则客户端可以发出中止取消。

要求

要求
最低受支持的客户端 Windows 2000 专业版 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 Windows
标头 rpcasync.h (包括 Rpc.h)
Library Rpcrt4.lib
DLL Rpcrt4.dll

另请参阅

异步 RPC

RPC_ASYNC_STATE

RpcAsyncAbortCall

RpcAsyncCompleteCall

RpcAsyncGetCallHandle

RpcAsyncGetCallStatus

RpcAsyncInitializeHandle

RpcServerTestCancel