Modelo de recebimento de dados e modelo de envio de dados

Um cliente de um moniker assíncrono pode escolher entre um modelo de recebimento e envio de dados para conduzir uma operação IMoniker::BindToStorage assíncrona e receber notificações assíncronas. No modelo de recebimento de dados, o cliente conduz a operação de vinculação e o moniker fornece dados ao cliente somente à medida que são lidos. Em outras palavras, após a primeira chamada para IBindStatusCallback::OnDataAvailable, o moniker não fornece nenhum dado ao cliente, a menos que o cliente tenha consumido todos os dados que já estão disponíveis.

Como os dados são baixados somente quando solicitados, os clientes que escolhem o modelo de recebimento de dados devem ler esses dados em tempo hábil. No caso de downloads da Internet com monikers de URL, a operação de ligação pode falhar se um cliente esperar muito antes de solicitar mais dados.

Em um modelo de push de dados, o moniker conduz a operação de associação assíncrona e notifica continuamente o cliente sempre que novos dados ficam disponíveis. O cliente pode escolher se deseja ler os dados a qualquer momento durante a operação de ligação, mas o moniker levará a operação de ligação à conclusão independentemente disso.

Além disso, você precisa se lembrar de seguir as regras COM para alocação de memória ao usar monikers assíncronos, especificamente o seguinte:

  • Sempre que uma interface COM ou chamada de função retorna um buffer (string ou outro) para seu cliente, o cliente é responsável por liberar a memória chamando CoTaskMemFree.
  • Sempre que uma interface ou função COM requer um buffer de seu cliente, o cliente deve alocar esse buffer usando CoTaskMemAlloc e o chamador deve liberá-lo.

Certifique-se de seguir essas regras ao alocar cadeias de caracteres ou buffers que são passados para monikers assíncronos e lembre-se de liberar memória retornada por monikers assíncronos. Consulte Gerenciando alocação de memória e tópicos relacionados para obter detalhes completos.

Monikers assíncronos