Share via


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)
程式庫 Rpcrt4.lib
Dll Rpcrt4.dll

另請參閱

異步 RPC

RPC_ASYNC_STATE

RpcAsyncAbortCall

RpcAsyncCompleteCall

RpcAsyncGetCallHandle

RpcAsyncGetCallStatus

RpcAsyncInitializeHandle

RpcServerTestCancel