Udostępnij przez


Anulowanie wywołania asynchronicznego

Klient może anulować wywołanie asynchroniczne, które jest w toku, jeśli obiekt wywołania implementuje interfejs ICancelMethodCalls. W przypadku obiektów korzystających ze standardowego marshalingu ICancelMethodCalls jest zawsze dostępna dla wywołań marshalowanych. W przypadku obiektów używających niestandardowego marshalingu lub wywołań do obiektów serwera w tym samym apartamencie, ta funkcjonalność jest dostępna wyłącznie wtedy, gdy obiekt wywołania implementuje ICancelMethodCalls.

Klient może anulować wywołanie w dowolnym momencie, od momentu wywołania metody Begin_ do momentu, gdy metoda Finish_ zostanie zwrócona. Jeśli klient anuluje wywołanie przed wywołaniem metody Finish_, musi wywołać metodę Finish_, aby wyczyścić stan obiektu wywołania. Dopóki klient tego nie zrobi, wszystkie wywołania dowolnej metody Begin_ obiektu wywołania będą zwracać RPC_E_CALL_PENDING.

Aby anulować wywołanie asynchroniczne

  1. Wykonaj zapytanie względem obiektu wywołania ICancelMethodCalls.

  2. Najpierw wywołaj ICancelMethodCalls::Cancel, a następnie Release, aby zwolnić wskaźnik uzyskany przez wywołanie QueryInterface w kroku 1.

  3. Jeśli klient nie nazwał już metody Finish_, wywołaj ją teraz.

Nie ma gwarancji, że serwer rzeczywiście zatrzymał wykonywanie wywołania. Jeśli dalsza praca klienta zależy od stanu serwera, który mógł zostać zmieniony przez wywołanie lub nie, klient powinien określić ten stan przed kontynuowaniem.

Tworzenie asynchronicznego wywołania