Một số lệnh gọi đến API Google Ads sẽ trả về các thao tác diễn ra trong thời gian dài (LRO). Các thao tá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 mà không yêu cầu một RPC chặn duy nhất.
Lớp OperationFuture
Bạn tương tác với LRO trong thư viện ứng dụng Java bằng cách sử dụng lớp OperationFuture. Vì OperationFuture dựa vào ứng dụng dịch vụ cơ bản để thăm dò API nhằm cập nhật trạng thái, hãy đảm bảo rằng ứng dụng dịch vụ vẫn mở và hoạt động cho đến khi thao tác hoàn tất.
Không nên:
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);
}
}
Nên dùng:
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);
}
Lưu ý cách OperationFuture chỉ được dùng trong khi OfflineUserDataJobServiceClient vẫn mở trong khối try-with-resources.