我想同時對 2 個不同的服務進行網路呼叫。最后,我將 2 個物件壓縮Response到一個流中。我正在使用 a Callable,但我不確定我是否以正確的方式解決這個問題。似乎我仍然會被第一次get()呼叫阻止Future,對吧?有人能告訴我我是否走在正確的軌道上嗎?這是我到目前為止所擁有的:
// submit the 2 calls to the thread pool
ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
Future<Mono<Response<ProcessInstance>>> processFuture =
executorService.submit(() -> getProcessInstances(processDefinitionKey, encryptedIacToken));
Future<Mono<Response<Task>>> taskFuture =
executorService.submit(() -> getTaskResponses(processDefinitionKey, encryptedIacToken, 100, 0));
// get the result of the 2 calls
Optional<Tuple2<Response<ProcessInstance>, Response<Task>>> tuple;
try {
Mono<Response<ProcessInstance>> processInstances = processFuture.get();
Mono<Response<Task>> userTasks = taskFuture.get();
tuple = processInstances.zipWith(userTasks).blockOptional();
} catch (InterruptedException e) {
log.error("Exception while processing response", e);
// Restore interrupted state...
Thread.currentThread().interrupt();
return emptyProcessResponseList;
} catch (ExecutionException e) {
log.error("Exception while processing response", e);
return emptyProcessResponseList;
}
uj5u.com熱心網友回復:
給定:您需要等到兩個任務都完成。
如果processFuture先結束,您將立即失敗并等到taskFuture結束。如果taskFuture先結束,您將阻塞直到processFuture結束,但該taskFuture.get()任務完成后呼叫將立即回傳。無論哪種情況,結果都是一樣的。
您可以使用CompletableFutures 來代替,CompletableFuture.allOf()但是對于這種簡單的事情,您所擁有的效果很好。另請參閱等待未來串列
uj5u.com熱心網友回復:
您的代碼將阻塞直到processFuture完成,然后它將阻塞直到taskFuture完成。
可呼叫物件將并行處理,因此您可以節省時間(假設執行緒池大小 >= 2)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/467934.html
上一篇:org.springframework.web.servlet.config.annotation中的Javamisising庫
