Método IWbemServices::CancelAsyncCall (wbemcli.h)

O método IWbemServices::CancelAsyncCall cancela todas as chamadas assíncronas atualmente pendentes com base no ponteiro IWbemObjectSink , que foi originalmente passado para o método assíncrono. O ponteiro IWbemObjectSink pendente pode ser liberado antes da chamada ou após o retorno da chamada. O método CancelAsyncCall não está operacional de dentro de um coletor e não tem suporte de provedores de método. Isso significa que apenas o fim do cliente da chamada é cancelado. O provedor de implementação não é notificado de que a chamada foi cancelada e é executada até a conclusão. Você deve considerar isso antes de cancelar métodos que levam muito tempo para serem concluídos, como os métodos Defrag e Format na classe Win32_Volume .

Sintaxe

HRESULT CancelAsyncCall(
  [in] IWbemObjectSink *pSink
);

Parâmetros

[in] pSink

Ponteiro para a implementação IWbemObjectSink fornecida pelo cliente para qualquer um dos métodos assíncronos de IWbemServices.

Retornar valor

Esse método retorna um HRESULT que indica o status da chamada de método. A lista a seguir lista o valor contido em um HRESULT.

Em caso de falha, você pode obter informações disponíveis da função COM GetErrorInfo.

Códigos de erro específicos de COM também poderão ser retornados se problemas de rede fizerem com que você perca a conexão remota com o Gerenciamento do Windows.

Nota Se SetStatus não tiver sido chamado no coletor do aplicativo até o momento em que o WMI processar CancelAsyncCall, o WMI chamará SetStatus nesse coletor com WBEM_E_CALL_CANCELLED como o valor para o parâmetro hResult .
 
O tempo e a natureza de uma operação assíncrona podem afetar se o WMI é capaz de cancelar a operação. Somente consultas longas provavelmente serão canceladas com êxito antes de serem concluídas. Operações mais rápidas, como exclusões ou modificações assíncronas, normalmente são concluídas antes que o WMI possa processar uma chamada CancelAsyncCall . Portanto, enquanto CancelAsyncCall tenta cancelar a operação atual, às vezes tudo o que pode ser feito é liberar o ponteiro IWbemObjectSink .
Nota É possível fazer várias chamadas assíncronas usando o mesmo coletor de objetos. Nesse caso, o método CancelAsyncCall cancela todas as chamadas assíncronas que compartilham esse coletor de objeto. É altamente recomendável que você crie uma instância de um coletor de objeto para cada chamada assíncrona pendente.
 

Comentários

Como o retorno de chamada para o coletor pode não ser retornado no mesmo nível de autenticação exigido pelo cliente, é recomendável usar a comunicação semissíncrona em vez de assíncrona. Para obter mais informações, consulte Chamar um método. Chamar CancelAsyncCall de dentro de uma implementação de IWbemObjectSink::Indicate ou IWbemObjectSink::SetStatus pode interferir no estado WMI e não é recomendado.

No caso de uma chamada de método, como ExecMethodAsync, somente o final do cliente da chamada é cancelado. O provedor de implementação não é notificado de que a chamada foi cancelada e é executada até a conclusão.

Para obter mais informações sobre como usar chamadas assíncronas, consulte Fazendo uma chamada assíncrona com C++ e Recebendo notificações de eventos assíncronos

Exemplos

Para obter um exemplo completo que usa CancelAsyncCall, consulte Exemplo: recebendo notificações de eventos por meio do WMI

O exemplo C++ a seguir, obtido do exemplo \\Arquivos de Programas\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\wmi\vc\decoupled\instance_provider, demonstra uma implementação de CancelAsyncCall.
HRESULT CProvider_IWbemServices :: CancelAsyncCall ( 
  
 IWbemObjectSink *a_Sink
)
{
 HRESULT t_Result = WBEM_E_NOT_AVAILABLE ;
 return t_Result ;
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista
Servidor mínimo com suporte Windows Server 2008
Plataforma de Destino Windows
Cabeçalho wbemcli.h (include Wbemidl.h)
Biblioteca 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

Confira também

IWbemObjectSink

IWbemServices