Asynchronous and Synchronous Binding

The client may check to see whether the moniker is asynchronous by calling the IsAsyncMoniker function. If the client returns the BINDF_ASYNCHRONOUS flag, rather than returning an object pointer or a storage pointer from subsequent calls to IMoniker::BindToStorage or IMoniker::BindToObject, the moniker returns MK_S_ASYNCHRONOUS in place of the object pointer and NULL in place of the storage pointer. In response, the client should wait to receive the requested object or storage during implementation of IBindStatusCallback::OnDataAvailable and IBindStatusCallBack::OnObjectAvailable.

The callback object also receives progress notification through IBindStatusCallback::OnProgress, data availability notification through OnDataAvailable, and various other notifications from the moniker about the status of the binding operation.

If the client does not return the BINDF_ASYNCHRONOUS flag from the moniker's call to IBindStatusCallback::GetBindInfo, the bind operation will proceed synchronously and the desired object or storage will be returned from subsequent calls to BindToObject or BindToStorage. Similarly, if the client desires synchronous operation and does not wish to receive any progress notifications or callbacks, it can request an asynchronous moniker to behave synchronously by not implementing IBindStatusCallback. In such cases, the asynchronous moniker will behave like a standard synchronous moniker.

Asynchronous Monikers