Operaciones de larga duración (LRO)

Varias llamadas a la API muestran operaciones de larga duración. Estos rastrean el estado de un trabajo que se ejecuta durante un período prolongado, de modo que no es conveniente tener una RPC de bloqueo.

Clase OperationFuture

La forma más obvia de interactuar con las LRO es mediante la clase OperationFuture. Si usas esto, asegúrate de que no se destruya el cliente de servicio.

No se recomienda:

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

Recomendado:

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

Observa que la clase OperationFuture solo se usa mientras OfflineUserDataJobServiceClient está dentro del alcance.