Data-Pull 모델 및 Data-Push 모델

비동기 모니커의 클라이언트는 비동기 IMoniker::BindToStorage 작업을 구동하고 비동기 알림을 수신하기 위해 데이터 끌어오기 모델과 데이터 푸시 모델 중에서 선택할 수 있습니다. 데이터 풀 모델에서 클라이언트는 바인딩 작업을 구동하고 모니커는 데이터를 읽을 때만 클라이언트에 제공합니다. 즉, IBindStatusCallback::OnDataAvailable에 대한 첫 번째 호출 후 클라이언트가 이미 사용 가능한 모든 데이터를 사용하지 않는 한 모니커는 클라이언트에 데이터를 제공하지 않습니다.

데이터가 요청된 경우에만 다운로드되므로 데이터 끌어오기 모델을 선택하는 클라이언트는 이 데이터를 적시에 읽어야 합니다. URL 모니커가 있는 인터넷 다운로드의 경우 클라이언트가 더 많은 데이터를 요청하기 전에 너무 오래 대기하는 경우 바인딩 작업이 실패할 수 있습니다.

데이터 푸시 모델에서 모니커는 비동기 바인딩 작업을 구동하고 새 데이터를 사용할 수 있을 때마다 클라이언트에 지속적으로 알린다. 클라이언트는 바인딩 작업 중 언제든지 데이터를 읽을지 여부를 선택할 수 있지만 모니커는 바인딩 작업을 완료로 유도합니다.

또한 비동기 모니커, 특히 다음을 사용할 때 메모리 할당에 대한 COM 규칙을 따라야 합니다.

  • COM 인터페이스 또는 함수 호출이 버퍼(문자열 또는 기타)를 클라이언트에 반환할 때마다 클라이언트는 CoTaskMemFree를 호출하여 메모리를 해제해야 합니다.
  • COM 인터페이스 또는 함수에 클라이언트의 버퍼가 필요할 때마다 클라이언트는 CoTaskMemAlloc 을 사용하여 해당 버퍼를 할당해야 하며 호출 수신자는 이를 해제해야 합니다.

비동기 모니커에 전달되는 문자열 또는 버퍼를 할당할 때 이러한 규칙을 따르고 비동기 모니커에서 반환된 메모리를 해제해야 합니다. 자세한 내용은 메모리 할당 및 관련 topics 관리를 참조하세요.

비동기 모니커