Compartir a través de


Función RpcAsyncCancelCall (rpcasync.h)

El cliente llama a la función RpcAsyncCancelCall para cancelar una llamada asincrónica.

Sintaxis

RPC_STATUS RpcAsyncCancelCall(
  PRPC_ASYNC_STATE pAsync,
  BOOL             fAbort
);

Parámetros

pAsync

Puntero a la estructura RPC_ASYNC_STATE que contiene información de llamada asincrónica.

fAbort

Si es TRUE, la llamada se cancela inmediatamente. Si es FALSE, espere a que el servidor complete la llamada.

Valor devuelto

Valor Significado
RPC_S_OK
Se procesó la solicitud de cancelación.
RPC_S_INVALID_ASYNC_HANDLE
El identificador asincrónico no es válido.
 
Nota Para obtener una lista de códigos de error válidos, consulte Rpc Return Values.
 

Comentarios

Hay dos maneras de que un cliente solicite la cancelación de una llamada asincrónica: abortiva y nonabortive. En una cancelación anulativa (fAbortCall es TRUE), la función RpcAsyncCancelCall envía una notificación de cancelación al servidor y al lado cliente y la llamada asincrónica se cancela inmediatamente, sin esperar una respuesta del servidor. Tenga en cuenta que, en una aplicación multiproceso, el cliente solo puede cancelar una llamada asincrónica después de que el subproceso que originó la llamada se haya devuelto correctamente. Esto es necesario para asegurarse de que la llamada no se cancelará de forma asincrónica por otro subproceso después de que se haya producido un error sincrónicamente mientras se emite. En general, si se produce un error en una llamada asincrónica, no se debe cancelar de forma asincrónica. La aplicación cliente debe garantizar este comportamiento si se pueden emitir y cancelar llamadas en subprocesos diferentes.

El servidor comprueba si hay solicitudes de cancelación del cliente mediante una llamada a RpcServerTestCancel. Según el estado de la llamada en el momento en que se emitió la solicitud de cancelación y la frecuencia con la que el servidor comprueba las cancelaciones, la llamada puede o no completarse normalmente. La aplicación cliente debe llamar a RpcAsyncCompleteCall para completar la llamada y el valor devuelto indicará si la llamada se completó, produjo un error o se canceló. Sin embargo, el cliente debe esperar a que se complete la llamada original antes de llamar a RpcAsyncCompleteCall.

En una cancelación nonabortiva (fAbortCall es FALSE), la función RpcAsyncCancelCall notifica al servidor de la cancelación y el cliente espera a que el servidor complete la llamada. No hay ningún mecanismo de tiempo de espera integrado. Si desea que se agote el tiempo de espera de la llamada, el cliente debe emitir primero una cancelación nobortiva mediante su propio mecanismo de tiempo de espera. Si se agota el tiempo de espera de la llamada, el cliente puede emitir una cancelación anulativa.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows 2000 Server [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado rpcasync.h (incluir Rpc.h)
Library Rpcrt4.lib
Archivo DLL Rpcrt4.dll

Consulte también

RPC asincrónico

RPC_ASYNC_STATE

RpcAsyncAbortCall

RpcAsyncCompleteCall

RpcAsyncGetCallHandle

RpcAsyncGetCallStatus

RpcAsyncInitializeHandle

RpcServerTestCancel