Функция 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.
 

Комментарии

Клиент может запросить отмену асинхронного вызова двумя способами — прерванным и неабортивным. При прерывании отмены (fAbortCall имеет значение TRUE) функция RpcAsyncCancelCall отправляет уведомление об отмене на сервер и на стороне клиента, а асинхронный вызов немедленно отменяется, не дожидаясь ответа от сервера. Обратите внимание, что в многопоточных приложениях асинхронный вызов может быть отменен клиентом только после того, как поток, который вызвал вызов, вернулся из него с успехом. Это необходимо для того, чтобы другой поток не отменил вызов асинхронно после синхронного сбоя при выполнении. Как правило, если асинхронный вызов завершается синхронным сбоем, его не следует отменять асинхронно. Клиентское приложение должно обеспечить такое поведение, если вызовы могут быть выданы и отменены в разных потоках.

Сервер проверяет наличие запросов на отмену от клиента, вызывая RpcServerTestCancel. В зависимости от состояния вызова на момент отправки запроса на отмену и частоты проверки сервером отмены вызов может завершиться или не завершиться в обычном режиме. Клиентское приложение должно вызвать RpcAsyncCompleteCall , чтобы завершить вызов, и возвращаемое значение будет указывать, был ли вызов завершен, завершился ли он сбоем или был отменен. Однако клиент должен по-прежнему ждать завершения исходного вызова, прежде чем вызывать RpcAsyncCompleteCall.

При неабортивной отмене (fAbortCall имеет значение FALSE) функция RpcAsyncCancelCall уведомляет сервер об отмене, и клиент ожидает завершения вызова сервера. Встроенный механизм времени ожидания отсутствует. Если требуется, чтобы время ожидания вызова истекло, клиент должен сначала выполнить неабортивную отмену с помощью собственного механизма времени ожидания. Если время ожидания вызова истекает, клиент может выполнить прерванную отмену.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Профессиональная [классические приложения | Приложения UWP]
Минимальная версия сервера Windows 2000 Server [классические приложения | Приложения UWP]
Целевая платформа Windows
Header rpcasync.h (включая Rpc.h)
Библиотека Rpcrt4.lib
DLL Rpcrt4.dll

См. также раздел

Асинхронный RPC

RPC_ASYNC_STATE

RpcAsyncAbortCall

RpcAsyncCompleteCall

RpcAsyncGetCallHandle

RpcAsyncGetCallStatus

RpcAsyncInitializeHandle

RpcServerTestCancel