Modalità di archiviazione

L'archiviazione asincrona supporta due modalità di archiviazione: blocco e non blocco, che un client (un browser o l'oggetto stesso) può specificare restituendo BINDF_ASYNCSTORAGE dalla chiamata del moniker a IBindStatusCallback::GetBindInfo. Se un client specifica BINDF_ASYNCSTORAGE, riceve un puntatore a un'archiviazione asincrona non bloccata. In caso contrario, riceve un puntatore a un'archiviazione asincrona bloccata. Anche se il client non richiede un'operazione di associazione asincrona (non registrando IBindStatusCallback con il contesto di associazione), il moniker restituisce comunque un'archiviazione asincrona bloccante, consentendo il caricamento progressivo per le applicazioni legacy.

In modalità non sbloccante, un'archiviazione asincrona restituisce E_PENDING quando i dati non sono disponibili. Dopo aver ricevuto questo messaggio, il client attende la notifica che i dati aggiuntivi sono disponibili prima di riprovare a scaricarlo.

In modalità di blocco, anziché restituire E_PENDING, l'archiviazione asincrona blocca la chiamata fino a quando non sono disponibili nuovi dati, quindi sblocca la chiamata e restituisce i nuovi dati. Il client deve essere pronto per ricevere i dati. Mentre il thread è bloccato, i dati già passati al client sono completamente disponibili per l'utente.

La modalità di blocco è necessaria perché i client non sanno che l'archiviazione asincrona non riconosce E_PENDING e presuppone che si sia verificato un errore non recuperabile. Il blocco dell'archiviazione asincrona consente ai client esistenti di eseguire il rendering progressivo.