用戶端非同步管道處理
進行非同步遠端呼叫之前,用戶端必須先初始化非同步控制碼。 如同非樞紐程式,用戶端會以非同步控制碼作為第一個參數來呼叫非同步函式,並使用非同步控制碼來傳送和接收管道資料、查詢呼叫的狀態,以及接收回複。
用戶端會使用非同步控制碼做為第一個參數,進行非同步遠端程序呼叫。 用戶端可以使用這個控制碼來查詢呼叫的狀態,並接收回複。 非同步管道模型是對稱的。 用戶端和伺服器應用程式都會主動傳送和接收管道資料 (,而不是同步 RPC,而管道資料會以被動方式傳送和接收) 。
用戶端會在適當的非同步管道上呼叫 push 函式,並使用管道的狀態變數作為第一個參數,以傳送非同步管道資料。 當 推播 函式傳回時,用戶端可以修改或釋放傳送緩衝區。
如果RPC_ASYNC_NOTIFY_ON_SEND_COMPLETE旗標是在非同步控制碼中設定,而且如果 ACS 作為通知機制使用,則當管道傳送實際完成時,APC 會排入佇列。 您可以利用這項機制來實作流程式控制制。 不過請注意,如果用戶端在上一個推送完成之前推送另一個緩衝區,用戶端可能會根據傳輸作業的速度,只接收一個傳送完成通知,而不是針對每個緩衝區或每個 推播 作業接收一個通知。 當用戶端傳送所有管道資料時,它會進行最後一個 推送 呼叫,並將元素數目設定為 0。
用戶端程式會在適當的非同步管道上呼叫 提取 函式,並使用管道的狀態變數作為第一個參數,以接收非同步管道資料。 如果沒有可用的管道資料, 提取 函式會傳回RPC_S_ASYNC_CALL_PENDING。
如果通知機制是 APC,而且伺服器傳回RPC_S_ASYNC_CALL_PENDING,用戶端必須等到它從執行時間收到 RpcReceiveComplete APC,然後再呼叫 提取 。