Operazioni a lunga esecuzione (LRO)

Diverse chiamate all'API restituiscono operazioni a lunga esecuzione. Monitorano lo stato di un job eseguito per un periodo di tempo prolungato, in modo tale che avere il blocco dell'RPC non è auspicabile.

Classe OperationFuture

Il modo più ovvio per interagire con gli LRO è tramite OperationFuture. Se lo utilizzi, assicurati che il client del 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 mentre la OfflineUserDataJobServiceClient rientra nell'ambito.