Diverse chiamate all'API restituiscono operazioni a lunga esecuzione. Monitorano lo stato di un job eseguito per un periodo di tempo prolungato, in modo tale che avere il blocco dell'RPC non è auspicabile.
Classe OperationFuture
Il modo più ovvio per interagire con gli LRO è tramite
OperationFuture
. Se lo utilizzi, assicurati che il client del servizio non venga eliminato.
Sconsigliato:
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);
}
}
Consigliato:
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);
}
Nota come la classe OperationFuture
viene utilizzata solo mentre la
OfflineUserDataJobServiceClient
rientra nell'ambito.