次の方法で共有


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 戻り値」を参照してください。
 

注釈

クライアントが非同期呼び出しの取り消しを要求するには、中止非分類の 2 つの方法があります。 中止キャンセル (fAbortCallTRUE)場合、RpcAsyncCancelCall 関数はサーバーとクライアント側にキャンセル通知を送信し、非同期呼び出しはサーバーからの応答を待たずに直ちに取り消されます。 マルチスレッド アプリケーションでは、非同期呼び出しを取り消すことができるのは、呼び出しを開始したスレッドが成功した後に限られます。 これは、呼び出しが発行中に同期的に失敗した後に、別のスレッドによって非同期的に取り消されないようにするために必要です。 一般に、非同期呼び出しが同期的に失敗した場合、非同期で取り消すべきではありません。 異なるスレッドで呼び出しが発行および取り消される可能性がある場合は、クライアント アプリケーションでこの動作を確認する必要があります。

サーバーは 、RpcServerTestCancel を呼び出して、クライアントからのキャンセル要求をチェックします。 取り消し要求が発行された時点の呼び出しの状態と、サーバーがキャンセルをチェックする頻度によっては、呼び出しが正常に完了する場合と完了しない場合があります。 クライアント アプリケーションは RpcAsyncCompleteCall を 呼び出して呼び出しを完了する必要があり、戻り値は呼び出しが完了したか、失敗したか、取り消されたかを示します。 ただし、クライアントは RpcAsyncCompleteCall を呼び出す前に、元の呼び出しが完了するまで待機する必要があります。

非並べ替えキャンセル (fAbortCallFALSE) では、 RpcAsyncCancelCall 関数はキャンセルをサーバーに通知し、クライアントはサーバーが呼び出しを完了するまで待機します。 組み込みのタイムアウト メカニズムはありません。 呼び出しをタイムアウトにする場合、クライアントはまず、独自のタイムアウト メカニズムを使用して非分類キャンセルを発行する必要があります。 呼び出しがタイムアウトした場合、クライアントは中止キャンセルを発行できます。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー rpcasync.h (Rpc.h を含む)
Library Rpcrt4.lib
[DLL] Rpcrt4.dll

こちらもご覧ください

非同期 RPC

RPC_ASYNC_STATE

RpcAsyncAbortCall

RpcAsyncCompleteCall

RpcAsyncGetCallHandle

RpcAsyncGetCallStatus

RpcAsyncInitializeHandle

RpcServerTestCancel