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

El método IWbemServices::CancelAsyncCall cancela las llamadas asincrónicas pendientes actualmente basadas en el puntero IWbemObjectSink , que se pasó originalmente al método asincrónico. El puntero IWbemObjectSink pendiente se puede liberar antes de la llamada o después de que se devuelva la llamada. El método CancelAsyncCall no está operativo desde un receptor y no es compatible con los proveedores de métodos. Esto significa que solo se cancela el final del cliente de la llamada. El proveedor de implementación no recibe una notificación de que la llamada se canceló y se ejecuta hasta su finalización. Debe considerar esto antes de cancelar los métodos que tardan mucho tiempo en completarse, como los métodos Defrag y Format de la clase Win32_Volume .

Sintaxis

HRESULT CancelAsyncCall(
  [in] IWbemObjectSink *pSink
);

Parámetros

[in] pSink

Puntero a la implementación IWbemObjectSink proporcionada por el cliente a cualquiera de los métodos asincrónicos de IWbemServices.

Valor devuelto

Este método devuelve un valor HRESULT que indica el estado de la llamada al método. En la lista siguiente se muestra el valor contenido en un HRESULT.

Si se produce un error, puede obtener información disponible de la función COM GetErrorInfo.

También se pueden devolver códigos de error específicos de COM si los problemas de red provocan la pérdida de la conexión remota a la administración de Windows.

Nota Si no se ha llamado a SetStatus en el receptor de la aplicación en el momento en que WMI procesa CancelAsyncCall, WMI llama a SetStatus en ese receptor con WBEM_E_CALL_CANCELLED como valor para el parámetro hResult .
 
El tiempo y la naturaleza de una operación asincrónica pueden afectar a si WMI puede cancelar la operación. Solo es probable que las consultas largas se cancelen correctamente antes de que se hayan completado. Operaciones más rápidas, como eliminaciones asincrónicas o modificaciones, normalmente completadas antes de que WMI pueda procesar una llamada CancelAsyncCall . Por lo tanto, mientras CancelAsyncCall intenta cancelar la operación actual, a veces todo lo que se puede hacer es liberar el puntero IWbemObjectSink .
Nota Es posible realizar numerosas llamadas asincrónicas con el mismo receptor de objetos. En este caso, el método CancelAsyncCall cancela todas las llamadas asincrónicas que comparten este receptor de objetos. Se recomienda encarecidamente crear una instancia de un receptor de objetos para cada llamada asincrónica pendiente.
 

Comentarios

Como es posible que la devolución de llamada al receptor no se devuelva en el mismo nivel de autenticación que requiere el cliente, se recomienda usar la comunicación semisincrónica en lugar de la asincrónica. Para más información, vea Llamada a un método. Llamar a CancelAsyncCall desde una implementación de IWbemObjectSink::Indicate o IWbemObjectSink::SetStatus puede interferir con el estado WMI y no se recomienda.

En el caso de una llamada de método como ExecMethodAsync, solo se cancela el final del cliente de la llamada. El proveedor de implementación no recibe una notificación de que la llamada se canceló y se ejecuta hasta su finalización.

Para obtener más información sobre cómo usar llamadas asincrónicas, vea Realizar una llamada asincrónica con C++ y recibir notificaciones de eventos asincrónicas.

Ejemplos

Para obtener un ejemplo completo que usa CancelAsyncCall, vea Ejemplo: Recepción de notificaciones de eventos a través de WMI

El siguiente ejemplo de C++, tomado del ejemplo \\Archivos de programa\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\wmi\vc\desacopled\instance_provider, muestra una implementación de CancelAsyncCall.
HRESULT CProvider_IWbemServices :: CancelAsyncCall ( 
  
 IWbemObjectSink *a_Sink
)
{
 HRESULT t_Result = WBEM_E_NOT_AVAILABLE ;
 return t_Result ;
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista
Servidor mínimo compatible Windows Server 2008
Plataforma de destino Windows
Encabezado wbemcli.h (include Wbemidl.h)
Library Wbemuuid.lib
Archivo 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

Consulte también

IWbemObjectSink

IWbemServices