Udostępnij przez


model Data-Pull i model Data-Push

Klient asynchronicznego monikera może wybrać między modelem ściągania danych i wypychania danych w celu prowadzenia asynchronicznej IMoniker::BindToStorage operacji i otrzymywania powiadomień asynchronicznych. W modelu ściągania danych klient obsługuje operację wiązania, a moniker dostarcza dane klientowi tylko podczas jego odczytu. Innymi słowy, po pierwszym wywołaniu metody IBindStatusCallback::OnDataAvailable, moniker nie dostarcza żadnych danych do klienta, chyba że klient zużyje wszystkie dostępne już dane.

Ponieważ dane są pobierane tylko w żądany sposób, klienci, którzy wybierają model ściągania danych, muszą mieć pewność, że dane są odczytywane w odpowiednim czasie. W przypadku pobierania z Internetu za pomocą monikers adresów URLoperacja powiązania może zakończyć się niepowodzeniem, jeśli klient czeka zbyt długo przed zażądaniem większej ilości danych.

W modelu wypychania danych moniker napędza operację powiązania asynchronicznego i stale powiadamia klienta za każdym razem, gdy są dostępne nowe dane. Klient może zdecydować, czy odczytywać dane w dowolnym momencie podczas operacji wiązania, ale moniker będzie napędzać operację wiązania do ukończenia niezależnie od tego.

Ponadto należy pamiętać, aby postępować zgodnie z regułami MODELU COM dotyczącymi alokacji pamięci podczas korzystania z asynchronicznych elementów monikerowych, w szczególności następujących:

  • Za każdym razem, gdy interfejs COM lub wywołanie funkcji zwraca bufor (ciąg lub inny) do klienta, klient jest odpowiedzialny za zwolnienie pamięci przez wywołanie CoTaskMemFree.
  • Za każdym razem, gdy interfejs COM lub funkcja wymaga buforu od klienta, klient musi przydzielić ten bufor przy użyciu CoTaskMemAlloc, a obiekt wywoływany musi go zwolnić.

Pamiętaj, aby przestrzegać tych reguł podczas przydzielania ciągów lub przekazywanych do asynchronicznych jednostek monikerów i pamiętaj, aby zwolnić pamięć zwracaną przez asynchroniczne elementy monikerów. Aby uzyskać szczegółowe informacje, zobacz Zarządzanie alokacją pamięci i powiązane tematy.

Asynchronous Monikers