Condividi tramite


Metodo IWbemServices::CancelAsyncCall (wbemcli.h)

Il metodo IWbemServices::CancelAsyncCall annulla tutte le chiamate asincrone attualmente in sospeso in base al puntatore IWbemObjectSink , che è stato originariamente passato al metodo asincrono. Il puntatore IWbemObjectSink in sospeso può essere rilasciato prima della chiamata o dopo la restituzione della chiamata. Il metodo CancelAsyncCall non è operativo dall'interno di un sink e non è supportato dai provider di metodi. Ciò significa che solo la fine client della chiamata viene annullata. Il provider di implementazione non riceve una notifica che indica che la chiamata è stata annullata e viene eseguita fino al completamento. È consigliabile prendere in considerazione questa operazione prima di annullare i metodi che richiedono molto tempo, ad esempio i metodi Defrag e Format nella classe Win32_Volume .

Sintassi

HRESULT CancelAsyncCall(
  [in] IWbemObjectSink *pSink
);

Parametri

[in] pSink

Puntatore all'implementazione IWbemObjectSink fornita dal client a uno dei metodi asincroni di IWbemServices.

Valore restituito

Questo metodo restituisce un valore HRESULT che indica lo stato della chiamata al metodo. L'elenco seguente elenca il valore contenuto in hrESULT.

In caso di errore, è possibile ottenere informazioni disponibili dalla funzione COM GetErrorInfo.

I codici di errore specifici di COM possono essere restituiti anche se i problemi di rete causano la perdita della connessione remota a Gestione Windows.

Nota Se SetStatus non è stato chiamato nel sink dell'applicazione dal momento in cui WMI elabora CancelAsyncCall, WMI chiama SetStatus su tale sink con WBEM_E_CALL_CANCELLED come valore per il parametro hResult .
 
L'intervallo e la natura di un'operazione asincrona possono influire sul fatto che WMI sia in grado di annullare l'operazione. È probabile che solo le query lunghe vengano annullate correttamente prima del completamento. Operazioni più veloci, ad esempio eliminazioni asincrone o modifiche, in genere completate prima che WMI possa elaborare una chiamata CancelAsyncCall . Pertanto , mentre CancelAsyncCall tenta di annullare l'operazione corrente, a volte tutto ciò che può essere eseguito consiste nel rilasciare il puntatore IWbemObjectSink .
Nota È possibile effettuare numerose chiamate asincrone usando lo stesso sink di oggetti. In questo caso, il metodo CancelAsyncCall annulla tutte le chiamate asincrone che condividono questo sink di oggetto. È consigliabile creare un'istanza di un sink di oggetto per ogni chiamata asincrona in sospeso.
 

Commenti

Poiché il callback al sink potrebbe non essere restituito allo stesso livello di autenticazione richiesto dal client, è consigliabile usare la comunicazione semiincrona anziché la comunicazione asincrona. Per altre informazioni, vedere Chiamata di un metodo. La chiamata a CancelAsyncCall dall'interno di un'implementazione di IWbemObjectSink::Indicate o IWbemObjectSink::SetStatus può interferire con lo stato WMI e non è consigliata.

Nel caso di una chiamata al metodo, ad esempio ExecMethodAsync, viene annullata solo la fine client della chiamata. Il provider di implementazione non riceve una notifica che indica che la chiamata è stata annullata e viene eseguita fino al completamento.

Per altre informazioni su come usare le chiamate asincrone, vedere Esecuzione di una chiamata asincrona con C++ e ricezione di notifiche di eventi asincrone

Esempio

Per un esempio completo che usa CancelAsyncCall, vedere Esempio: Ricezione di notifiche degli eventi tramite WMI

L'esempio C++ seguente, tratto dall'esempio \\Programmi\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\wmi\vc\decoupled\instance_provider, illustra un'implementazione di CancelAsyncCall.
HRESULT CProvider_IWbemServices :: CancelAsyncCall ( 
  
 IWbemObjectSink *a_Sink
)
{
 HRESULT t_Result = WBEM_E_NOT_AVAILABLE ;
 return t_Result ;
}

Requisiti

Requisito Valore
Client minimo supportato Windows Vista
Server minimo supportato Windows Server 2008
Piattaforma di destinazione Windows
Intestazione wbemcli.h (include Wbemidl.h)
Libreria Wbemuuid.lib
DLL Fastprox.dll; Esscli.dll; FrameDyn.dll; FrameDynOS.dll; Ntevt.dll; Stdprov.dll; Viewprov.dll; Wbemcomn.dll; Wbemcore.dll; Wbemess.dll; Wbemsvc.dll; Wmipicmp.dll; Wmidcprv.dll; Wmipjobj.dll; Wmiprvsd.dll

Vedi anche

IWbemObjectSink

Iwbemservices