如何结合两个ListenableFutures并从第一个中获得结果以完成

时间:2018-09-03 15:54:11

标签: java

有没有简单的方法(提供的库)来组合两个com.google.common.util.concurrent.ListenableFuture并从第一个结果中获取结果即可完成。

coalesce的时间:

ListenableFuture f1 = ...;
ListenableFuture f2 = ...;
ListenableFuture f3 = Future.firstToComplete(f1,f2)

我想这相当于CompletionStage。applyToEither

f3 = f1.applyToEither(f2, res->res);

1 个答案:

答案 0 :(得分:1)

想要使用Futures.inCompletionOrder的声音,只需等待列表中的第一个将来即可。

一旦第一个期货完成,您可能会想cancel()列表中所有剩余的期货,但是那里有一场(主要是良性的)比赛,您可以在取消期货时完成这些期货;这取决于完成程度。在最坏的情况下,您可能最终还是要为所有其他期货完成所有工作,但是如果您主要关注的是延迟而不是底层工作项,那么这对您来说就不是问题。