Operasi yang berjalan lama (LRO)

Beberapa panggilan ke API menampilkan operasi yang berjalan lama. Fungsi ini melacak status tugas yang dijalankan dalam jangka waktu yang lama, sehingga memiliki RPC pemblokiran tidak diinginkan.

Class OperationFuture

Cara paling mudah untuk berinteraksi dengan LRO adalah dengan class OperationFuture. Jika Anda menggunakannya, pastikan bahwa klien layanan tidak dihancurkan.

Tidak direkomendasikan:

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

Direkomendasikan:

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

Perhatikan bagaimana class OperationFuture hanya digunakan saat OfflineUserDataJobServiceClient berada dalam cakupan.