客户端异步管道处理

在进行异步远程调用之前,客户端必须先初始化异步句柄。 与非管道过程一样,客户端使用异步句柄作为第一个参数调用异步函数,并使用异步句柄发送和接收管道数据、查询调用状态并接收答复。

客户端使用异步句柄作为第一个参数进行异步远程过程调用。 客户端可以使用此句柄查询呼叫的状态并接收答复。 异步管道模型是对称的。 客户端和服务器应用程序都主动 (发送和接收管道数据,而不是同步 RPC,其中将发送和接收管道数据被动) 。

客户端通过在适当的异步管道上调用 推送 函数(管道的状态变量作为第一个参数)发送异步管道数据。 推送函数返回时,客户端可以修改或释放发送缓冲区。

如果在异步句柄中设置了RPC_ASYNC_NOTIFY_ON_SEND_COMPLETE标志,如果 APC 用作通知机制,则当管道发送实际完成时,APC 将排队。 可以利用此机制来实现流控制。 但是,请注意,如果客户端在上一次推送完成之前推送另一个缓冲区,客户端可能会根据传输操作的速度,仅接收一个发送完成通知,而不是每个缓冲区或每个 推送 操作的一个通知。 当客户端发送所有管道数据时,它会进行最后一次 推送 调用,其中元素数设置为 0。

客户端程序通过在适当的异步管道上调用 拉取 函数来接收异步管道数据,并将管道的状态变量作为第一个参数。 如果没有管道数据可用, 则拉取 函数将返回RPC_S_ASYNC_CALL_PENDING。

如果通知机制为 APC,并且服务器返回RPC_S_ASYNC_CALL_PENDING,则客户端必须等待,直到它从运行时接收 RpcReceiveComplete APC,然后再次调用 拉取