Asynchronous and Synchronous Storage

Asynchronous monikers may also return an Asynchronous Storage object in the IBindStatusCallback::OnDataAvailable notification. This storage object may allow access to some of the object's persistent data while the binding is still in progress. A client can choose between two modes for the storage: blocking and nonblocking.

In blocking mode, which is compatible with current implementations of storage objects, if data is unavailable, the call blocks until data arrives. In nonblocking mode, rather than blocking the call, the storage object returns a new error E_PENDING when data is unavailable. A client aware of asynchronous binding and storage notes this error and waits for further notifications (OnDataAvailable) to retry the operation. A client can choose between a synchronous (blocking) and asynchronous (nonblocking) storage by choosing whether to set the BINDF_ASYNCSTORAGE flag in the grfBINDF value returned to IBindStatusCallback::GetBindInfo.

Asynchronous Monikers