Stockage Façons

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. Dans le cas contraire, elle reçoit un pointeur vers un stockage asynchrone bloquant. Même si le client ne demande pas une 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 le chargement progressif pour les applications héritées.

En mode non bloquant, un stockage asynchrone retourne E _ en attente lorsque les données ne sont pas disponibles. Lors de 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 le télécharger.

En mode blocage, au lieu de retourner E _ en attente, 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. Pendant que le thread est bloqué, les données déjà transmises au client sont entièrement disponibles pour l’utilisateur.

Le mode blocage est nécessaire, car les clients ne connaissant pas le stockage asynchrone ne reconnaissent pas E _ en attente et supposent qu’une erreur irrécupérable s’est produite. Le blocage du stockage asynchrone permet aux clients existants d’effectuer un rendu progressif.