RpcAsyncCancelCall 函式 (rpcasync.h)
用戶端會呼叫 RpcAsyncCancelCall 函式來取消異步呼叫。
語法
RPC_STATUS RpcAsyncCancelCall(
PRPC_ASYNC_STATE pAsync,
BOOL fAbort
);
參數
pAsync
包含異步呼叫資訊的 RPC_ASYNC_STATE 結構的指標。
fAbort
如果 為 TRUE,則會立即取消呼叫。 如果 為 FALSE,請等候伺服器完成呼叫。
傳回值
值 | 意義 |
---|---|
|
已處理取消要求。 |
|
異步句柄無效。 |
備註
用戶端有兩種方式可以要求取消異步呼叫,也就是中止 和非 中止。 在中止的取消 (fAbortCall 為 TRUE) ,RpcAsyncCancelCall 函式會將取消通知傳送至伺服器和用戶端,而異步呼叫會立即取消,而不會等待伺服器的回應。 請注意,在多線程應用程式中,只有在產生呼叫的線程傳回成功之後,用戶端才能取消異步呼叫。 這是確保呼叫在發出時同步失敗之後,其他線程不會以異步方式取消呼叫。 一般而言,如果異步呼叫同步失敗,則不應該以異步方式取消。 如果不同線程上可能會發出和取消呼叫,用戶端應用程式必須確定此行為。
伺服器會呼叫 RpcServerTestCancel 來檢查用戶端是否有取消要求。 根據發出取消要求時呼叫的狀態,以及伺服器檢查取消的頻率而定,呼叫可能或可能無法正常完成。 用戶端應用程式必須呼叫 RpcAsyncCompleteCall 來完成呼叫,而傳回值會指出呼叫已完成、失敗或已取消。 不過,用戶端仍必須等候原始呼叫完成,再呼叫 RpcAsyncCompleteCall。
在非中止的取消 (fAbortCall 為 FALSE) RpcAsyncCancelCall 函式會通知取消的伺服器,而用戶端會等候伺服器完成呼叫。 沒有內建逾時機制。 如果您想要呼叫逾時,客戶端應該先使用自己的逾時機制發出非中止取消。 如果呼叫逾時,用戶端可以發出中止的取消。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows 2000 Server [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | rpcasync.h (包含 Rpc.h) |
程式庫 | Rpcrt4.lib |
Dll | Rpcrt4.dll |