Compartilhar via


Modelo Data-Pull e modelo de Data-Push

Um cliente de um moniker assíncrono pode escolher entre um modelo de pull de dados e de push de dados para conduzir uma operação assíncrona IMoniker::BindToStorage e receber notificações assíncronas. No modelo de pull de dados, o cliente conduz a operação de associação e o moniker fornece dados para o cliente somente à medida que é lido. Em outras palavras, após a primeira chamada para IBindStatusCallback::OnDataAvailable, o moniker não fornece dados 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 conforme são solicitados, os clientes que escolhem o modelo de pull de dados devem ler esses dados em tempo hábil. No caso de downloads da Internet com monikers de URL, a operação de associação poderá falhar se um cliente aguardar muito tempo antes de solicitar mais dados.

No 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 estiverem disponíveis. O cliente pode escolher se deseja ler os dados em qualquer momento durante a operação de associação, mas o moniker conduzirá a operação de associação à conclusão, independentemente disso.

Além disso, você precisa 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 (cadeia de caracteres ou outro) para seu cliente, o cliente é responsável por liberar a memória chamando CoTaskMemFree.
  • Sempre que uma interface ou função COM exigir um buffer de seu cliente, o cliente deverá alocar esse buffer usando CoTaskMemAlloc e o destinatário deve liberá-lo.

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

monikers assíncronos