Режимы хранения
Асинхронное хранилище поддерживает два режима хранения: блокирующий и неблокирующий, который клиент (браузер или сам объект) может указать, возвращая BINDF_ASYNCSTORAGE из вызова моникера к IBindStatusCallback::GetBindInfo. Если клиент указывает BINDF_ASYNCSTORAGE, он получает указатель на асинхронное хранилище без блокировки. В противном случае он получает указатель на блокирующее асинхронное хранилище. Даже если клиент не запрашивает асинхронную операцию привязки (не регистрируя IBindStatusCallback в контексте привязки), моникер по-прежнему возвращает блокирующее асинхронное хранилище, что позволяет постепенно загружать устаревшие приложения.
В неблокируемом режиме асинхронное хранилище возвращает E_PENDING, если данные недоступны. Получив это сообщение, клиент ожидает уведомления о доступности дополнительных данных, прежде чем пытаться скачать их еще раз.
В режиме блокировки вместо возврата E_PENDING асинхронное хранилище блокирует вызов, пока не будут доступны новые данные, а затем разблокирует вызов и возвращает новые данные. Клиент должен быть готов к получению данных. Пока поток заблокирован, данные, уже переданные клиенту, полностью доступны пользователю.
Режим блокировки необходим, так как клиенты не знают об асинхронном хранилище не распознают E_PENDING и предполагают, что произошла неустранимая ошибка. Блокировка асинхронного хранилища позволяет существующим клиентам выполнять последовательную отрисовку.