当一个未来依赖另一个未来时,处理两种不同类型的未来的理想方法是什么?



我正在看AKKA的Java期货API,我看到了很多处理相同类型的多个期货的方法,但我没有看到任何方法可以处理不同类型的期货。我猜我把它弄得更复杂了。

假设我们有两个不同的actor: actorA和actorB。它们基于不同的类,并且各自返回不同的Future。然而,actorB依赖于actorA的Future。以下是逻辑,如何最好地处理这种情况?

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

如果我们有一个actor和actor的列表呢?

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

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

为什么不直接把它们包装起来,就像你做的那样,但是做一个小小的改变——把a的结果传递给b呢?

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

这个安排仅仅意味着actorB.sendRequestReplyFuture()actorA.sendRequestReplyFuture()完成之前不会被调用。这没什么问题,事实上,我喜欢你在那里的模式。

相关内容

  • 没有找到相关文章