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 |
---|---|
|
A solicitação de cancelamento foi processada. |
|
O identificador assíncrono é inválido. |
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 |