對 Google Ads API 的多項呼叫會傳回長時間執行的作業 (LRO)。這些軌跡會追蹤長時間執行的工作狀態,不需要單一封鎖 RPC。
OperationFuture 類別
您可以使用 Java 用戶端程式庫中的 OperationFuture 類別與 LRO 互動。由於 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);
}
請注意,只有在 OfflineUserDataJobServiceClient 仍開啟於 try-with-resources 區塊內時,才會使用 OperationFuture。