对该 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
在范围内。