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 |
---|---|
|
La richiesta di annullamento è stata elaborata. |
|
L'handle asincrono non è valido. |
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 |