处理两种不同类型期货的理想方式是一个未来取决于另一个未来?

时间:2011-07-14 23:17:45

标签: java akka future

我在看AKKA的Java Futures API,我看到很多方法可以处理同一类型的多个期货,但我没有看到任何突然出现在处理不同类型期货的东西。我猜我说这比现在更复杂。

无论如何,让我们说我们有两个不同的演员:actorA和actorB。它们基于不同的类,它们各自返回不同的未来。但是,actorB依赖于actorA的Future。以下是逻辑,如何最好地处理这种情况?

Future<A> a = actorA.sendRequestReplyFuture(...);

Future<B> b = actorB.sendRequestReplyFuture(a);

如果我们有一个actorAs和actorB的列表怎么样?

2 个答案:

答案 0 :(得分:1)

为什么不像你一样包装它们,但只需稍作修改 - 将a的结果传递给b。

Future a = actorA.sendRequestReplyFuture(...);

Future b = actorB.sendRequestReplyFuture(a.get());

这种安排只意味着在actorB.sendRequestReplyFuture()完成之前不会调用actorA.sendRequestReplyFuture()。没错,事实上,我喜欢你所拥有的模式。

答案 1 :(得分:1)

警告,只是从内存写入,可能无法编译OOTB:

Future<B> b = actor.sendRequestReplyFuture().flatMap( new akka.japi.Function<A,Future<B>>() {
  public Future<B> apply(A a) {
     return actor.sendRequestReplyFuture(a);
  }
}