Modes de stockage
Le stockage asynchrone prend en charge deux modes de stockage : le blocage et le non-blocage, qu’un client (un navigateur ou l’objet lui-même) peut spécifier en retournant BINDF_ASYNCSTORAGE à partir de l’appel du moniker à IBindStatusCallback::GetBindInfo. Si un client spécifie BINDF_ASYNCSTORAGE, il reçoit un pointeur vers un stockage asynchrone non bloquant. Sinon, il reçoit un pointeur vers un stockage asynchrone bloquant. Même si le client ne demande pas d’opération de liaison asynchrone (en n’inscrivant pas IBindStatusCallback avec le contexte de liaison), le moniker retourne toujours un stockage asynchrone bloquant, ce qui permet un chargement progressif pour les applications héritées.
En mode non bloquant, un stockage asynchrone retourne E_PENDING lorsque les données ne sont pas disponibles. À la réception de ce message, le client attend une notification indiquant que des données supplémentaires sont disponibles avant de réessayer de les télécharger.
En mode bloquant, au lieu de retourner E_PENDING, le stockage asynchrone bloque l’appel jusqu’à ce que de nouvelles données soient disponibles, puis débloque l’appel et retourne les nouvelles données. Le client doit être prêt à recevoir les données. Lorsque le thread est bloqué, les données déjà passées au client sont entièrement disponibles pour l’utilisateur.
Le mode de blocage est nécessaire, car les clients qui ne connaissent pas le stockage asynchrone ne reconnaîtront pas E_PENDING et supposeront qu’une erreur irrécupérable s’est produite. Le blocage du stockage asynchrone permet aux clients existants d’effectuer un rendu progressif.