Partager via


Annulation d’un appel asynchrone

Un client peut annuler un appel asynchrone en cours si l’objet d’appel implémente l’interface ICancelMethodCalls . Pour les objets qui utilisent le marshaling standard, ICancelMethodCalls est toujours disponible pour les appels marshalés. Pour les objets qui utilisent le marshaling personnalisé ou pour les appels à des objets serveur dans le même appartement, cette fonctionnalité n’est disponible que si l’objet d’appel implémente ICancelMethodCalls.

Le client peut annuler l’appel à tout moment, à partir du moment où la méthode Begin_ est appelée jusqu’à ce que la méthode Finish_ retourne. Si le client annule l’appel avant d’appeler la méthode Finish_, il doit appeler la méthode Finish_ pour propre l’état de l’objet d’appel. Tant que le client ne l’a pas fait, tous les appels à une méthode Begin_ sur l’objet d’appel retournent RPC_E_CALL_PENDING.

Pour annuler un appel asynchrone

  1. Interrogez l’objet d’appel pour ICancelMethodCalls.

  2. Appelez ICancelMethodCalls::Cancel, puis appelez Release pour libérer le pointeur obtenu par l’appel QueryInterface à l’étape 1.

  3. Si le client n’a pas déjà appelé la méthode Finish_, appelez-la maintenant.

Il n’existe aucune garantie que le serveur a effectivement arrêté l’exécution de l’appel. Si le travail ultérieur du client dépend d’un état de serveur que l’appel a peut-être modifié ou non, le client doit déterminer cet état avant de continuer.

Effectuer un appel asynchrone