عملیات طولانی مدت (LROs)

چندین فراخوانی به API گوگل ادز، عملیات طولانی‌مدت (LRO) را برمی‌گرداند. این عملیات، وضعیت کاری را که در مدت زمان طولانی و بدون نیاز به یک RPC مسدودکننده واحد اجرا می‌شود، ردیابی می‌کنند.

کلاس OperationFuture

شما با استفاده از کلاس OperationFuture با LROها در کتابخانه کلاینت جاوا تعامل می‌کنید. از آنجا که 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 باز بماند.