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

מספר קריאות ל-API מחזירות פעולות ממושכות. הם עוקבים אחרי הסטטוס של משימה שמתבצעת למשך פרק זמן ארוך, כך שיש חסימה של RPC.

סיווג ActionFuture

הדרך הברורה ביותר לאינטראקציה עם LRO היא באמצעות הכיתה OperationFuture. אם משתמשים באפשרות הזו, צריך לוודא שלקוח השירות לא הושמד.

לא מומלץ:

private void doSomething() {
  OperationFuture<Empty, Empty> future = startLongRunningOperation(jobName);
  future.get();
}

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

מומלץ:

private void doSomethingElse() {
  try (OfflineUserDataJobServiceClient offlineUserDataJobServiceClient =
      googleAdsClient.getLatestVersion().createOfflineUserDataJobServiceClient()) {
    OperationFuture<Empty, Empty> future = startLongRunningOperation(offlineUserDataJobServiceClient, jobName);
    future.get();
  }
}

private OperationFuture<Empty, Empty> startLongRunningOperation(String jobToStart)
    throws UnsupportedEncodingException {
    offlineUserDataJobServiceClient.runOfflineUserDataJobAsync(jobToStart);
}

שימו לב איך משתמשים במחלקה OperationFuture רק כשהOfflineUserDataJobServiceClient נמצא בהיקף.