數據提取模型和數據推送模型

異步 Moniker 的用戶端可以選擇數據提取和數據推送模型,以驅動異步 IMoniker::BindTo 儲存體 作業和接收異步通知。 在數據提取模型中,用戶端會驅動系結作業,Moniker 只會在讀取時將數據提供給用戶端。 換句話說,在第一次呼叫 IBindStatusCallback::OnDataAvailable 之後,Moniker 不會提供任何數據給用戶端,除非用戶端已取用所有已可用的數據。

由於數據只會在要求時下載,因此選擇數據提取模型的客戶端必須確定能及時讀取此數據。 如果是具有 URL Moniker 的因特網下載,如果用戶端在要求更多數據之前等候太久,系結作業可能會失敗。

在數據推送模型中,Moniker 會驅動異步系結作業,並在每當有新的數據可用時持續通知用戶端。 用戶端可以選擇是否要在系結作業期間的任何時間點讀取數據,但Moniker會推動系結作業完成,而不管怎樣。

此外,您必須記得在使用異步 Moniker 時遵循記憶體配置的 COM 規則,特別是下列各項:

  • 每當 COM 介面或函式呼叫將緩衝區(字串或其他)傳回至其用戶端時,用戶端就會負責呼叫 CoTaskMemFree 來釋放記憶體。
  • 每當 COM 介面或函式需要其用戶端的緩衝區時,客戶端必須使用 CoTaskMemAlloc 配置該緩衝區,而被呼叫者必須釋放該緩衝區

在配置傳遞至異步 Moniker 的字串或緩衝區時,請務必遵循這些規則,並記得釋放異步 Moniker 所傳回的記憶體。 如需完整詳細數據,請參閱 管理記憶體配置 和相關主題。

異步Monikers