Partager via


Fonction RpcAsyncCancelCall (rpcasync.h)

Le client appelle la fonction RpcAsyncCancelCall pour annuler un appel asynchrone.

Syntaxe

RPC_STATUS RpcAsyncCancelCall(
  PRPC_ASYNC_STATE pAsync,
  BOOL             fAbort
);

Paramètres

pAsync

Pointeur vers la structure RPC_ASYNC_STATE qui contient des informations d’appel asynchrones.

fAbort

Si la valeur est TRUE, l’appel est annulé immédiatement. Si la valeur est FALSE, attendez que le serveur termine l’appel.

Valeur retournée

Valeur Signification
RPC_S_OK
La demande d’annulation a été traitée.
RPC_S_INVALID_ASYNC_HANDLE
Le handle asynchrone n’est pas valide.
 
Note Pour obtenir la liste des codes d’erreur valides, consultez Valeurs de retour RPC.
 

Remarques

Il existe deux façons pour un client de demander l’annulation d’un appel asynchrone : abortive et non abortive. Dans une annulation abandonnée (fAbortCall a la valeur TRUE), la fonction RpcAsyncCancelCall envoie une notification d’annulation côté serveur et client et l’appel asynchrone est annulé immédiatement, sans attendre une réponse du serveur. Notez que dans une application multithread, un appel asynchrone ne peut être annulé par le client qu’une fois que le thread à l’origine de l’appel a été retourné avec succès. Cela est nécessaire pour garantir que l’appel ne sera pas annulé de manière asynchrone par un autre thread après son échec synchrone lors de son émission. En général, si un appel asynchrone échoue de manière synchrone, il ne doit pas être annulé de manière asynchrone. L’application cliente doit s’assurer de ce comportement si des appels peuvent être émis et annulés sur différents threads.

Le serveur recherche les demandes d’annulation du client en appelant RpcServerTestCancel. En fonction de l’état de l’appel au moment de l’émission de la demande d’annulation et de la fréquence à laquelle le serveur vérifie les annulations, l’appel peut ou non se terminer normalement. L’application cliente doit appeler RpcAsyncCompleteCall pour terminer l’appel et la valeur de retour indique si l’appel s’est terminé, a échoué ou a été annulé. Toutefois, le client doit toujours attendre la fin de l’appel d’origine avant d’appeler RpcAsyncCompleteCall.

Dans une annulation non abandonnée (fAbortCall a la valeur FALSE), la fonction RpcAsyncCancelCall avertit le serveur de l’annulation et le client attend que le serveur termine l’appel. Il n’existe aucun mécanisme de délai d’expiration intégré. Si vous souhaitez que l’appel expire, le client doit d’abord émettre une annulation non abandonnée à l’aide de son propre mécanisme de délai d’attente. Si l’appel expire, le client peut émettre un annulation avorté.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête rpcasync.h (inclure Rpc.h)
Bibliothèque Rpcrt4.lib
DLL Rpcrt4.dll

Voir aussi

RPC asynchrone

RPC_ASYNC_STATE

RpcAsyncAbortCall

RpcAsyncCompleteCall

RpcAsyncGetCallHandle

RpcAsyncGetCallStatus

RpcAsyncInitializeHandle

RpcServerTestCancel