RpcAsyncCancelCall-Funktion (rpcasync.h)

Der Client ruft die RpcAsyncCancelCall-Funktion auf, um einen asynchronen Aufruf abzubrechen.

Syntax

RPC_STATUS RpcAsyncCancelCall(
  PRPC_ASYNC_STATE pAsync,
  BOOL             fAbort
);

Parameter

pAsync

Zeiger auf die RPC_ASYNC_STATE Struktur, die asynchrone Aufrufinformationen enthält.

fAbort

Bei TRUE wird der Anruf sofort abgebrochen. Bei FALSE warten Sie, bis der Server den Aufruf abgeschlossen hat.

Rückgabewert

Wert Bedeutung
RPC_S_OK
Die Abbruchanforderung wurde verarbeitet.
RPC_S_INVALID_ASYNC_HANDLE
Das asynchrone Handle ist ungültig.
 
Hinweis Eine Liste der gültigen Fehlercodes finden Sie unter RPC-Rückgabewerte.
 

Hinweise

Es gibt zwei Möglichkeiten für einen Client, den Abbruch eines asynchronen Aufrufs anzufordern: abortiv und nicht abbruchfähig. Bei einem abgebrochenen Abbruch (fAbortCall ist TRUE) sendet die RpcAsyncCancelCall-Funktion eine Abbruchbenachrichtigung an die Server- und Clientseite, und der asynchrone Aufruf wird sofort abgebrochen, ohne auf eine Antwort vom Server zu warten. Beachten Sie, dass in einer Multithreadanwendung ein asynchroner Aufruf vom Client nur abgebrochen werden kann, nachdem der Thread, von dem der Aufruf stammt, erfolgreich zurückgegeben wurde. Dies ist erforderlich, um sicherzustellen, dass der Aufruf nicht asynchron von einem anderen Thread abgebrochen wird, nachdem er während der Ausgabe synchron fehlgeschlagen ist. Wenn ein asynchroner Aufruf synchron fehlschlägt, sollte er im Allgemeinen nicht asynchron abgebrochen werden. Die Clientanwendung muss dieses Verhalten sicherstellen, wenn Aufrufe für verschiedene Threads ausgegeben und abgebrochen werden können.

Der Server überprüft durch Aufrufen von RpcServerTestCancel auf Abbruchanforderungen vom Client. Abhängig vom Status des Anrufs zum Zeitpunkt der Abbruchanforderung und davon, wie oft der Server auf Abbruch überprüft, kann der Anruf normal abgeschlossen werden oder nicht. Die Clientanwendung muss RpcAsyncCompleteCall aufrufen, um den Aufruf abzuschließen. Der Rückgabewert gibt an, ob der Aufruf abgeschlossen, fehlgeschlagen oder abgebrochen wurde. Der Client muss jedoch noch warten, bis der ursprüngliche Aufruf abgeschlossen ist, bevor RpcAsyncCompleteCall aufgerufen wird.

Bei einem nicht abgebrochenen Abbruch (fAbortCall ist FALSE) benachrichtigt die RpcAsyncCancelCall-Funktion den Server über den Abbruch, und der Client wartet, bis der Server den Aufruf abgeschlossen hat. Es gibt keinen integrierten Timeoutmechanismus. Wenn für den Aufruf ein Timeout ausgeführt werden soll, sollte der Client zunächst einen nichtabortiven Abbruch mit einem eigenen Timeoutmechanismus ausführen. Wenn für den Aufruf ein Zeitüberschreitungsereignis besteht, kann der Client einen abgebrochenen Abbruch ausgeben.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile rpcasync.h (rpc.h einschließen)
Bibliothek Rpcrt4.lib
DLL Rpcrt4.dll

Weitere Informationen

Asynchroner RPC

RPC_ASYNC_STATE

RpcAsyncAbortCall

RpcAsyncCompleteCall

RpcAsyncGetCallHandle

RpcAsyncGetCallStatus

RpcAsyncInitializeHandle

RpcServerTestCancel