Condividi tramite


Funzione RpcAsyncCancelCall (rpcasync.h)

Il client chiama la funzione RpcAsyncCancelCall per annullare una chiamata asincrona.

Sintassi

RPC_STATUS RpcAsyncCancelCall(
  PRPC_ASYNC_STATE pAsync,
  BOOL             fAbort
);

Parametri

pAsync

Puntatore alla struttura RPC_ASYNC_STATE che contiene informazioni sulle chiamate asincrone.

fAbort

Se TRUE, la chiamata viene annullata immediatamente. Se FALSE, attendere che il server completi la chiamata.

Valore restituito

Valore Significato
RPC_S_OK
La richiesta di annullamento è stata elaborata.
RPC_S_INVALID_ASYNC_HANDLE
L'handle asincrono non è valido.
 
Nota Per un elenco di codici di errore validi, vedere Valori restituiti RPC.
 

Commenti

Esistono due modi per consentire a un client di richiedere l'annullamento di una chiamata asincrona, ovvero l'interruzione e la mancata interruzione. In un annullamento interrotto (fAbortCall è TRUE), la funzione RpcAsyncCancelCall invia una notifica di annullamento al lato server e client e la chiamata asincrona viene annullata immediatamente, senza attendere una risposta dal server. Si noti che in un'applicazione multithreading una chiamata asincrona può essere annullata solo dal client dopo che il thread che ha originato la chiamata è stato restituito con esito positivo. Ciò è necessario per assicurarsi che la chiamata non venga annullata in modo asincrono da un altro thread dopo che non è riuscita in modo sincrono durante l'esecuzione. In generale, se una chiamata asincrona non riesce in modo sincrono, non deve essere annullata in modo asincrono. L'applicazione client deve garantire questo comportamento se le chiamate possono essere eseguite e annullate in thread diversi.

Il server verifica la presenza di richieste di annullamento dal client chiamando RpcServerTestCancel. A seconda dello stato della chiamata al momento dell'emissione della richiesta di annullamento e della frequenza con cui il server verifica la presenza di annullamenti, la chiamata potrebbe o meno essere completata normalmente. L'applicazione client deve chiamare RpcAsyncCompleteCall per completare la chiamata e il valore restituito indicherà se la chiamata è stata completata, non riuscita o è stata annullata. Tuttavia, il client deve comunque attendere il completamento della chiamata originale prima di chiamare RpcAsyncCompleteCall.

In un annullamento non interrotto (fAbortCall è FALSE) la funzione RpcAsyncCancelCall invia una notifica al server dell'annullamento e il client attende che il server completi la chiamata. Non esiste alcun meccanismo di timeout predefinito. Se si vuole che la chiamata si verifichi il timeout, il client deve prima emettere un annullamento non interrotto usando il proprio meccanismo di timeout. Se si verifica il timeout della chiamata, il client può emettere un annullamento interrotto.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [app desktop | App UWP]
Server minimo supportato Windows 2000 Server [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione rpcasync.h (include Rpc.h)
Libreria Rpcrt4.lib
DLL Rpcrt4.dll

Vedi anche

RPC asincrona

RPC_ASYNC_STATE

RpcAsyncAbortCall

RpcAsyncCompleteCall

RpcAsyncGetCallHandle

RpcAsyncGetCallStatus

RpcAsyncInitializeHandle

RpcServerTestCancel