# Asynchronous Storage

Asynchronous storage enhances OLE’s structured storage specification to support asynchronous downloading of storage objects on high-latency, slow-link networks such as the Internet. Asynchronous storage enables both new and legacy applications that use compound files to efficiently render their content when accessed by means of existing Internet protocols. A single request to a World Wide Web server triggers the download of nested objects contained within a Web page, thereby eliminating the need to separately request each object. An asynchronous download and access mechanism enables an application to render the first page of data before all the data has been received. The exact order in which elements of a page become available can be specified by the Web publisher and is not dependent on random factors of network topology and server availability.

Asynchronous storage works together with asynchronous monikers to provide complete asynchronous binding behavior. (For more information on asynchronous monikers, see the Microsoft’s ActiveX™ Development Kit.) A protocol-specific asynchronous moniker triggers the binding operation and sets up the required components. In the Internet case, this moniker would be one that can parse a Universal Resource Locator (URL) to bind to an object or storage. If the target of the binding operation is a persistent object, the call to IMoniker::BindToStorage returns an asynchronous storage object.

Note Microsoft’s current version of URL monikers does not support asynchronous storage. A future version will do so.

An asynchronous moniker client requests asynchronous binding by implementing a bind-status callback object and registering it with the bind context. The bind-status callback object exposes the IBindStatusCallback interface, which enables the client to specify binding preferences and to receive progress and global data-availability notifications during the course of a binding operation. The asynchronous compound file implementation provides a connection point for IProgressNotify, which clients can use to receive specific availability notifications on individual streams.