Долгосрочные операции (LRO)

Несколько вызовов API возвращают длительные операции. Они отслеживают статус задания, которое выполняется в течение длительного периода времени, поэтому наличие блокирующего RPC нежелательно.

Класс OperationFuture

Самый очевидный способ взаимодействия с LRO — это класс OperationFuture . Если вы используете это, убедитесь, что клиент службы не уничтожен.

Не рекомендуется:

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

Рекомендуется:

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

Обратите внимание, что класс OperationFuture используется только тогда, когда OfflineUserDataJobServiceClient находится в области действия.