Operações de longa duração (LROs, na sigla em inglês)

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.