Operazioni a lunga esecuzione (LRO)

Diverse chiamate all'API restituiscono operazioni a lunga esecuzione. Questi tag tengono traccia dello stato di un job eseguito per un periodo di tempo prolungato, in modo che non sia desiderabile avere una RPC di blocco.

Classe OperationFuture

Il modo più ovvio per interagire con le LRO è con la classe OperationFuture. Se utilizzi questa opzione, assicurati che il client di servizio non venga eliminato.

Sconsigliato:

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

Consigliato:

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

Nota come la classe OperationFuture viene utilizzata solo quando OfflineUserDataJobServiceClient è nell'ambito.