Каков идеальный способ обработки двух разных типов фьючерсов, когда одно будущее зависит от другого будущего? - PullRequest
0 голосов
/ 15 июля 2011

Я смотрю на API Java Futures от AKKA и вижу много способов обработки нескольких фьючерсов одного типа, но я не вижу ничего, что выскочило бы на меня для обработки фьючерсов разных типов. Я предполагаю, что я делаю это более сложным, чем оно есть.

В любом случае, скажем, у нас есть два разных актера: actorA и actorB. Они основаны на разных классах, и каждый из них возвращает свое будущее. Тем не менее, actorB зависит от будущего от actorA. Является ли следующая логика, как лучше всего справиться с этим делом?

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

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

Как насчет того, если у нас есть список actorAs и actorBs?

Ответы [ 2 ]

1 голос
/ 18 июля 2011

ПРЕДУПРЕЖДЕНИЕ, только что записанное из памяти, может не скомпилировать OOTB:

Future<B> b = actor.sendRequestReplyFuture().flatMap( new akka.japi.Function<A,Future<B>>() {
  public Future<B> apply(A a) {
     return actor.sendRequestReplyFuture(a);
  }
}
1 голос
/ 15 июля 2011

Почему бы не просто обернуть их, как у вас, но с одним небольшим изменением - передать результат из a в b.

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

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

Это расположение означает, что actorB.sendRequestReplyFuture()не будет вызван, пока actorA.sendRequestReplyFuture() не закончится.Ничего плохого в этом, на самом деле, мне нравится шаблон, который у вас есть.

...