การดําเนินการระยะยาว (LRO)

การเรียก Google Ads API หลายครั้งจะแสดงผลการดำเนินการที่ใช้เวลานาน (LRO) ซึ่งจะติดตาม สถานะของงานที่ดำเนินการเป็นระยะเวลานานโดยไม่ต้อง ใช้ RPC ที่บล็อกรายการเดียว

OperationFuture class

คุณโต้ตอบกับ LRO ในไลบรารีของไคลเอ็นต์ Java โดยใช้คลาส OperationFuture เนื่องจาก OperationFuture อาศัยไคลเอ็นต์บริการพื้นฐานเพื่อสำรวจ API สำหรับการอัปเดตสถานะ โปรดตรวจสอบว่าไคลเอ็นต์บริการยังคงเปิดและใช้งานอยู่จนกว่าการดำเนินการจะเสร็จสมบูรณ์

ไม่แนะนำ:

private void executeOperation(String jobName) throws Exception {
  OperationFuture<Empty, OfflineUserDataJobMetadata> future =
      startLongRunningOperation(jobName);
  // FAILS: The service client was already closed when
  // startLongRunningOperation() exited its try-with-resources block, so
  // future.get() fails when polling.
  future.get();
}

private OperationFuture<Empty, OfflineUserDataJobMetadata>
    startLongRunningOperation(String jobToStart) {
  try (OfflineUserDataJobServiceClient offlineUserDataJobServiceClient =
      googleAdsClient
          .getLatestVersion()
          .createOfflineUserDataJobServiceClient()) {
    // Issues an asynchronous request to run the offline user data job.
    return offlineUserDataJobServiceClient.runOfflineUserDataJobAsync(
        jobToStart);
  }
}

แนะนำ:

private void executeOperation(String jobName) throws Exception {
  try (OfflineUserDataJobServiceClient offlineUserDataJobServiceClient =
      googleAdsClient
          .getLatestVersion()
          .createOfflineUserDataJobServiceClient()) {
    OperationFuture<Empty, OfflineUserDataJobMetadata> future =
        startLongRunningOperation(offlineUserDataJobServiceClient, jobName);
    // Waits for the operation to complete (with a timeout) while the client is
    // still open.
    future.get(5, TimeUnit.MINUTES);
  }
}

private OperationFuture<Empty, OfflineUserDataJobMetadata>
    startLongRunningOperation(
        OfflineUserDataJobServiceClient offlineUserDataJobServiceClient,
        String jobToStart) {
  return offlineUserDataJobServiceClient.runOfflineUserDataJobAsync(jobToStart);
}

โปรดสังเกตว่า OperationFuture จะใช้เฉพาะในขณะที่ OfflineUserDataJobServiceClient ยังเปิดอยู่ภายในบล็อก try-with-resources