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 |
---|---|
|
Die Abbruchanforderung wurde verarbeitet. |
|
Das asynchrone Handle ist ungültig. |
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 |