Várias chamadas para a API retornam operações de longa duração. Elas acompanham o status de um trabalho executado por um longo período de tempo, de modo que ter um o bloqueio de RPC não é desejável.
Classe OperationFuture
A maneira mais óbvia de interagir com LROs é com o classe OperationFuture. Se você usar isso, certifique-se de que o cliente de serviço não seja destruído.
Não recomendado:
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); } } Recomendação:
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); } Observe como a classe OperationFuture é usada apenas enquanto o OfflineUserDataJobServiceClient está no escopo.