פעולות ארוכות (LRO)

כמה קריאות ל-Google Ads API מחזירות פעולות ממושכות (LRO). הם עוקבים אחרי הסטטוס של משימה שמתבצעת לאורך זמן ממושך בלי לדרוש RPC חוסם יחיד.

מחלקת OperationFuture

כדי לקיים אינטראקציה עם 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.