有没有简单的方法(提供的库)来组合两个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);
答案 0 :(得分:1)
想要使用Futures.inCompletionOrder
的声音,只需等待列表中的第一个将来即可。
一旦第一个期货完成,您可能会想cancel()
列表中所有剩余的期货,但是那里有一场(主要是良性的)比赛,您可以在取消期货时完成这些期货;这取决于完成程度。在最坏的情况下,您可能最终还是要为所有其他期货完成所有工作,但是如果您主要关注的是延迟而不是底层工作项,那么这对您来说就不是问题。