Compartir a través de


Cancelación de una llamada asincrónica

Un cliente puede cancelar una llamada asincrónica que está en curso si el objeto de llamada implementa la interfaz ICancelMethodCalls . En el caso de los objetos que usan serialización estándar, ICancelMethodCalls siempre está disponible para las llamadas serialadas. Para los objetos que usan serialización personalizada o para llamadas a objetos de servidor dentro del mismo apartamento, esta funcionalidad solo está disponible si el objeto de llamada implementa ICancelMethodCalls.

El cliente puede cancelar la llamada en cualquier momento, desde el momento en que se llama al método Begin_ hasta que se devuelve el método Finish_. Si el cliente cancela la llamada antes de llamar al método Finish_, debe llamar al método Finish_ para limpiar el estado del objeto de llamada. Hasta que el cliente lo haya hecho, las llamadas a cualquier método Begin_ en el objeto de llamada devolverán RPC_E_CALL_PENDING.

Para cancelar una llamada asincrónica

  1. Consulte el objeto call para ICancelMethodCalls.

  2. Llame a ICancelMethodCalls::Cancel y, a continuación, llame a Release para liberar el puntero obtenido por la llamada QueryInterface en el paso 1.

  3. Si el cliente no ha llamado al método Finish_ ya, llámalo ahora.

No hay ninguna garantía de que el servidor detenga realmente la ejecución de la llamada. Si el trabajo adicional del cliente depende de algún estado de servidor que la llamada pueda haber cambiado o no, el cliente debe determinar ese estado antes de continuar.

Realización de una llamada asincrónica