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

Một số lệnh gọi đến API sẽ trả về các hoạt động diễn ra trong thời gian dài. Phương thức 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, do đó bạn không nên chặn RPC.

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 tuỳ chọn 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);
  }
}

Đề xuất:

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 khi OfflineUserDataJobServiceClient nằm trong phạm vi.