异步管道状态

本页介绍 RPC 调用的异步管道状态。

IN 管道

客户端行为

状态名称 行动
C 进行呼叫 使 RPC
  • 成功后转到状态 WS
  • 异常转到 End
若要失败:请转到 Can
P 进行推送
  • 失败时转到 End
  • 成功后转到 WS
若要失败:请转到 Can
WS 等待发送 等待通知
  • 未能收到通知,请转到 Can
  • 如果收到成功 RpcSendComplete,并且需要向 P 发送更多数据
  • 如果收到 rpcSendComplete成功,则无需将更多数据发送到 NP
  • 如果收到 RpcCallComplete 失败,请转到 Comp
若要失败:请转到 Can
NP Null 推送 推送 0 字节(null 推送)
  • 失败时转到 End
  • 成功后转到 WComp
若要失败:请转到 Can
取消呼叫 调用 RpcAsyncCancelCall转到 WComp
WComp 等待完成 等待接收 notificationCall-complete 通知。
转到Comp
Comp 完成 问题 RpcAsyncCompleteCall转到结束
结束

服务器行为

状态名称 行动
D 调用由 RPC 运行时转到 P 调度
若要失败(在 RPC 线程上执行时):引发异常;转到 End
正常失败:转到 A
P 进行拉取
  • 失败时转到 End
  • 成功和同步完成时,非零字节读取将转到 P
  • 成功且同步完成时,零字节读取(null 拉取)将转到 Comp
  • 成功和异步完成时(返回ERROR_IO_PENDING)转到 WP
若要失败:请转到 A
WP 等待拉取 等待通知若要失败:请转到 A
一个 中止呼叫 调用 RpcAsyncAbortCall转到结束
Comp 完成 调用 RpcAsyncCompleteCall转到结束
结束

OUT 管道

客户端行为

状态名称 行动
C 进行呼叫 使 RPC
  • 成功后转到 P
  • 失败时转到 Comp
若要失败:请转到 Can
P 进行拉取
  • 失败时转到 End
  • 成功和同步完成时,非零字节读取将转到 P
  • 成功且同步完成时,将零字节读取(null 拉取)转到 WComp
  • 成功和异步完成时(返回ERROR_IO_PENDING)转到 WP
若要失败:请转到 Can
WP 等待拉取 等待通知若要失败:请转到 Can
取消呼叫 调用 RpcAsyncCancelCall转到 WComp
WComp 等待完成 等待通知。 应收到呼叫完成通知。
转到Comp
Comp 完成 问题 RpcAsyncCompleteCall转到结束
结束

服务器行为

状态名称 行动
D 调用由 RPC 运行时转到 P 调度
若要失败(在 RPC 线程上执行时):引发异常;转到 End
正常失败:转到 A
P 进行推送
  • 成功后转到 WP
  • 失败时转到 End
若要失败:请转到 A
WP 等待推送 等待通知
  • 未能完成时,请转到 A
  • 如果收到成功 RpcSendComplete,并且需要向 P 发送更多数据
  • 如果收到 rpcSendComplete成功,则无需将更多数据发送到 NP
  • 如果收到失败,请转到 Comp
若要失败:请转到 A
NP Null 推送 推送 0 字节
  • 成功后转到 WNP
  • 失败时转到 Comp
若要失败:请转到 A
WNP 等待 Null 推送 等待通知
  • 未能完成时,请转到 A
  • 如果收到失败,请转到 Comp
  • 如果成功收到 Go Comp
一个 中止呼叫 调用 RpcAsyncAbortCall;转到 End
Comp 完成 问题 RpcAsyncCompleteCall;转到 End
结束

IN-OUT 管道

客户端行为

状态名称 行动
C 进行呼叫 使 RPC
  • 成功后转到 WS
  • 异常转到 End
若要失败:请转到 Can
PS 进行推送
  • 失败时转到 End
  • 成功后转到 WS
若要失败:请转到 Can
WS 等待发送 等待通知
  • 未能收到通知,请转到 Can
  • 如果收到成功 RpcSendComplete,需要向 PS 发送更多数据
  • 如果收到 rpcSendComplete成功,则无需将更多数据发送到 NP
  • 如果收到 RpcCallComplete 失败,请转到 Comp
若要失败:请转到 Can
NP Null 推送 推送 0 字节(null 推送)
  • 失败时转到 End
  • 成功后转到 PL
若要失败:请转到 Can
PL 进行拉取
  • 失败时转到 End
  • 成功和同步完成时,非零字节读取将转到 PL
  • 成功且同步完成时,将零字节读取(null 拉取)转到 WComp
  • 成功和异步完成时(返回ERROR_IO_PENDING)转到 WPL
若要失败:请转到 Can
WPL 等待拉取 等待通知若要失败:请转到 Can
取消呼叫 调用 RpcAsyncCancelCall转到 WComp
WComp 等待完成 等待通知。 应收到 CallComplete 通知。
转到Comp
Comp 完成 问题 RpcAsyncCompleteCall转到结束
结束

服务器行为

状态名称 行动
D RPC runtimeGo 将调用调度到 PL
若要失败(在 RPC 线程上执行时):引发异常;转到 End
正常失败:转到 A
PL 进行拉取
  • 失败时转到 End
  • 成功和同步完成时,非零字节读取将转到 PL
  • 成功和同步完成时,零字节读取(null 拉取)将转到 PS
  • 成功和异步完成时(返回ERROR_IO_PENDING)转到 WPL
若要失败:请转到 A
WPL 等待拉取 等待通知若要失败:请转到 A
PS 进行推送
  • 成功后转到 WPS
  • 失败时转到 End
若要失败:请转到 A
WPS 等待推送 等待通知
  • 未能完成时,请转到 A
  • 如果收到成功 RpcSendComplete,需要向 PS 发送更多数据
  • 如果收到 rpcSendComplete成功,则无需将更多数据发送到 NP
  • 如果收到失败,请转到 Comp
若要失败:请转到 A
NP Null 推送 推送 0 字节
  • 成功后转到 WNP
  • 失败时转到 Comp
若要失败:请转到 A
WNP 等待 Null 推送 等待通知
  • 未能完成时,请转到 A
  • 如果收到失败,请转到 Comp
  • 如果成功收到 Go Comp

一个 中止呼叫 调用 RpcAsyncAbortCall;转到 End
Comp 完成 问题 RpcAsyncCompleteCall;转到 End
结束