Abbrechen eines asynchronen Aufrufs

Ein Client kann einen asynchronen Aufruf abbrechen, der ausgeführt wird, wenn das Aufrufobjekt die ICancelMethodCalls-Schnittstelle implementiert. Für Objekte, die standardmäßiges Marshalling verwenden, ist ICancelMethodCalls immer für gemarshallte Aufrufe verfügbar. Für Objekte, die benutzerdefiniertes Marshalling verwenden, oder für Aufrufe von Serverobjekten innerhalb desselben Apartments ist diese Funktionalität nur verfügbar, wenn das Aufrufobjekt ICancelMethodCalls implementiert.

Der Client kann den Aufruf jederzeit abbrechen, ab wann die Begin_-Methode aufgerufen wird, bis die Finish_-Methode zurückgegeben wird. Wenn der Client den Aufruf vor dem Aufruf der Finish_-Methode abbricht, muss er die Finish_-Methode aufrufen, um den Zustand des Aufrufobjekts zu sauber. Bis der Client dies getan hat, geben alle Aufrufe einer Begin_-Methode für das Aufrufobjekt RPC_E_CALL_PENDING zurück.

So brechen Sie einen asynchronen Aufruf ab

  1. Fragen Sie das Aufrufobjekt für ICancelMethodCalls ab.

  2. Rufen Sie ICancelMethodCalls::Cancel auf, und rufen Sie dann Release auf, um den Zeiger freizugeben, der vom QueryInterface-Aufruf in Schritt 1 abgerufen wurde.

  3. Wenn der Client die Finish_-Methode noch nicht aufgerufen hat, rufen Sie sie jetzt auf.

Es gibt keine Garantie, dass der Server die Ausführung des Aufrufs tatsächlich beendet hat. Wenn die weitere Arbeit des Clients von einem Serverzustand abhängt, den der Aufruf möglicherweise geändert hat oder nicht, sollte der Client diesen Zustand ermitteln, bevor er fortfahren kann.

Durchführen eines asynchronen Aufrufs