Несколько вызовов 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
находится в области действия.