Opérations de longue durée

Plusieurs appels à l'API renvoient des opérations de longue durée. Ils suivent l'état d'une tâche qui s'exécute sur une période prolongée, de sorte qu'un RPC bloquant n'est pas souhaitable.

Classe OperationFuture

Le moyen le plus évident d'interagir avec les opérations de longue durée est d'utiliser la classe OperationFuture. Si vous l'utilisez, assurez-vous que le client de service n'est pas détruit.

Option déconseillée :

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

Recommandations :

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

Notez que la classe OperationFuture n'est utilisée que lorsque OfflineUserDataJobServiceClient fait partie du champ d'application.