Hoạt động dài hạn (LRO)

Một số lệnh gọi đến API trả về các thao tác chạy trong thời gian dài. Các URL này theo dõi trạng thái của một công việc thực thi trong một khoảng thời gian dài, chẳng hạn như chặn RPC là việc không mong muốn.

Lớp OperationFuture

Cách rõ ràng nhất để tương tác với LRO là sử dụng Lớp OperationFuture. Nếu bạn sử dụng phương thức này, hãy đảm bảo rằng ứng dụng dịch vụ không bị huỷ.

Không nên:

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);
  }
}

Nên dùng:

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);
}

Hãy lưu ý cách lớp OperationFuture chỉ được sử dụng trong khi OfflineUserDataJobServiceClient thuộc phạm vi.