我最近一直在与Google Guava和ListenableFutures进行广泛的合作,而我一直在寻找的东西是一种为未来完成提供无序流媒体处理程序的方法。我想象的是一个可以在 next()上阻止的迭代,直到另一个未来返回。
在我创建自己的努力之前,是否已经存在?
如果没有,我的想法是利用ListenableFuture的回调功能将结果推送到BlockingQueue。目标是在返回后立即处理返回值。 Futures.successfulAsList()
很棒,但在返回之前等待所有值,而不是让我安排其他有用的工作。
答案 0 :(得分:7)
您可以使用java.util.concurrent.CompletionService
。如果方法take
没有抛出Iterator.next()
,它的方法InterruptedException
可以很容易地包装到{{1}}。
答案 1 :(得分:1)
我认为你可以使用the same trick I've looked at with .NET's Task<T>
:
List<SettableFuture<T>>
值 - 与输入期货相同的数字现在是一个与输入序列对应的期货序列,但是按输入完成的顺序排列。然后调用者可以遍历列表,等待每个列表依次完成。