我正在看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()
完成之前不会被调用。这没什么问题,事实上,我喜欢你在那里的模式。