Beberapa panggilan ke Google Ads API menampilkan operasi yang berjalan lama (LRO). Objek ini melacak status tugas yang dijalankan dalam jangka waktu yang lama tanpa memerlukan satu RPC pemblokiran pun.
Class OperationFuture
Anda berinteraksi dengan LRO di library klien Java menggunakan class
OperationFuture. Karena OperationFuture mengandalkan klien layanan pokok untuk melakukan polling API guna mendapatkan update status, pastikan klien layanan tetap terbuka dan aktif hingga operasi selesai.
Tidak direkomendasikan:
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);
}
}
Direkomendasikan:
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);
}
Perhatikan bagaimana OperationFuture hanya digunakan saat
OfflineUserDataJobServiceClient tetap terbuka dalam blok try-with-resources.