非同期呼び出しの取り消し

クライアントは、呼び出しオブジェクトが ICancelMethodCalls インターフェイスを実装している 場合、進行中の非同期呼び出しを 取り消すことができます。 標準マーシャリングを使用するオブジェクトの場合、 ICancelMethodCalls はマーシャリングされた呼び出しで常に使用できます。 カスタム マーシャリングを使用するオブジェクト、または同じアパートメント内のサーバー オブジェクトを呼び出す場合、この機能は、呼び出しオブジェクトが ICancelMethodCalls を実装している場合にのみ使用できます。

クライアントは、Begin_ メソッドが呼び出されたときから、Finish_ メソッドが戻るまで、いつでも呼び出しを取り消すことができます。 クライアントは、Finish_ メソッドを呼び出す前に呼び出しをキャンセルする場合は、呼び出しオブジェクトの状態をクリーンするFinish_ メソッドを呼び出す必要があります。 クライアントがこれを行うまで、呼び出しオブジェクトの任意のBegin_ メソッドへの呼び出しは、RPC_E_CALL_PENDINGを返します。

非同期呼び出しのキャンセルを試みます。

  1. ICancelMethodCalls の呼び出しオブジェクトに対 してクエリを実行します

  2. ICancelMethodCalls::Cancel を呼び出し、Release を呼び出して、手順 1 で QueryInterface 呼び出しによって取得されたポインターを解放します。

  3. クライアントが Finish_ メソッドをまだ呼び出していない場合は、ここで呼び出します。

サーバーが実際に呼び出しの実行を停止したという保証はありません。 クライアントの追加作業が、呼び出しが変更された可能性があるサーバーの状態に依存している場合、クライアントは続行する前にその状態を判断する必要があります。

は非同期呼び出しです。