Função RpcAsyncCancelCall (rpcasync.h)

O cliente chama a função RpcAsyncCancelCall para cancelar uma chamada assíncrona.

Sintaxe

RPC_STATUS RpcAsyncCancelCall(
  PRPC_ASYNC_STATE pAsync,
  BOOL             fAbort
);

Parâmetros

pAsync

Ponteiro para a estrutura RPC_ASYNC_STATE que contém informações de chamada assíncronas.

fAbort

Se TRUE, a chamada será cancelada imediatamente. Se FALSE, aguarde até que o servidor conclua a chamada.

Valor retornado

Valor Significado
RPC_S_OK
A solicitação de cancelamento foi processada.
RPC_S_INVALID_ASYNC_HANDLE
O identificador assíncrono é inválido.
 
Nota Para obter uma lista de códigos de erro válidos, consulte RPC Return Values.
 

Comentários

Há duas maneiras de um cliente solicitar o cancelamento de uma chamada assíncrona: anulativa e nãobortiva. Em um cancelamento abortivo (fAbortCall é TRUE), a função RpcAsyncCancelCall envia uma notificação de cancelamento para o servidor e o lado do cliente e a chamada assíncrona é cancelada imediatamente, sem aguardar uma resposta do servidor. Observe que, em um aplicativo multithreaded, uma chamada assíncrona só pode ser cancelada pelo cliente depois que o thread que originou a chamada tiver retornado dela com êxito. Isso é necessário para garantir que a chamada não seja cancelada de forma assíncrona por outro thread depois de ter falhado de forma síncrona durante a emissão. Em geral, se uma chamada assíncrona falhar de forma síncrona, ela não deverá ser cancelada de forma assíncrona. O aplicativo cliente deve garantir esse comportamento se as chamadas puderem ser emitidas e canceladas em threads diferentes.

O servidor verifica se há solicitações de cancelamento do cliente chamando RpcServerTestCancel. Dependendo do estado da chamada no momento em que a solicitação de cancelamento foi emitida e com que frequência o servidor verifica se há cancelamentos, a chamada pode ou não ser concluída normalmente. O aplicativo cliente deve chamar RpcAsyncCompleteCall para concluir a chamada e o valor retornado indicará se a chamada foi concluída, falhou ou foi cancelada. No entanto, o cliente ainda deve aguardar a conclusão da chamada original antes de chamar RpcAsyncCompleteCall.

Em um cancelamento nãobortivo (fAbortCall é FALSE), a função RpcAsyncCancelCall notifica o servidor do cancelamento e o cliente aguarda o servidor concluir a chamada. Não há nenhum mecanismo de tempo limite interno. Se você quiser que a chamada chegue ao tempo limite, o cliente deve primeiro emitir um cancelamento nãobortivo usando seu próprio mecanismo de tempo limite. Se a chamada atingir o tempo limite, o cliente poderá emitir um cancelamento abortivo.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows 2000 Server [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho rpcasync.h (inclua Rpc.h)
Biblioteca Rpcrt4.lib
DLL Rpcrt4.dll

Confira também

RPC assíncrono

RPC_ASYNC_STATE

RpcAsyncAbortCall

RpcAsyncCompleteCall

RpcAsyncGetCallHandle

RpcAsyncGetCallStatus

RpcAsyncInitializeHandle

RpcServerTestCancel