Operaciones de larga duración (LRO)

Varias llamadas a la API muestran operaciones de larga duración. Estos hacen un seguimiento del estado de un trabajo que se ejecuta durante un período prolongado, de modo que tener un bloquear RPC no es deseable.

Clase OperationFuture

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

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 el elemento OfflineUserDataJobServiceClient está dentro del alcance.