Modos de almacenamiento
El almacenamiento asincrónico admite dos modos de almacenamiento: bloqueo y no bloqueo, que un cliente (ya sea un explorador o el propio objeto) puede especificar devolviendo BINDF_ASYNCSTORAGE desde la llamada del moniker a IBindStatusCallback::GetBindInfo. Si un cliente especifica BINDF_ASYNCSTORAGE, recibe un puntero a un almacenamiento asincrónico sin bloqueo. De lo contrario, recibe un puntero a un almacenamiento asincrónico de bloqueo. Incluso si el cliente no solicita una operación de enlace asincrónica (al no registrar IBindStatusCallback con el contexto de enlace), el moniker todavía devuelve un almacenamiento asincrónico de bloqueo, lo que permite la carga progresiva para las aplicaciones heredadas.
En el modo de no bloqueo, un almacenamiento asincrónico devuelve E_PENDING cuando los datos no están disponibles. Al recibir este mensaje, el cliente espera una notificación de que hay datos adicionales disponibles antes de volver a intentar descargarlo.
En el modo de bloqueo, en lugar de devolver E_PENDING, el almacenamiento asincrónico bloquea la llamada hasta que haya nuevos datos disponibles y, a continuación, desbloquea la llamada y devuelve los nuevos datos. El cliente debe estar listo para recibir los datos. Mientras el subproceso está bloqueado, los datos que ya se pasan al cliente están totalmente disponibles para el usuario.
El modo de bloqueo es necesario porque los clientes que no conocen el almacenamiento asincrónico no reconocerán E_PENDING y asumirán que se ha producido un error irrecuperable. Bloquear el almacenamiento asincrónico permite a los clientes existentes realizar la representación progresiva.