2013-07-01 4 views
1

новичок здесь ...Akka Список фьючерсов - как подождать, пока список фьючерсов не закончится?

У меня есть очень простая возможность вызова в коллекции объектов домена. При использовании фьючерсов все, о чем я забочусь, действительно знает, когда все фьючерсы завершены.

Так что я создаю коллекцию фьючерсов, итерируя по своим объектам домена, создавая будущее (с вызываемым) и добавляя его в коллекцию фьючерсов.

Предполагая, что вызываемый возвращает логическое значение, как я могу убедиться, что все фьючерсы завершены.

Oh! Я хочу подождать, пока эта коллекция не будет обработана, прежде чем обрабатывать другую коллекцию, поскольку второй процесс сбора зависит от первого.

Любая помощь приветствуется.

SAID DIFFERENTLY: Как можно дождаться окончания всех элементов массива? Нужно ли мне повторять и ждать по каждому?

ArrayList<Future<Object>> responses = new ArrayList<Future<Object>>(); 

PS: кодирование в JAVA, а также спутать на использовании PartialFunctions и т.д., возможно, на применении фильтра, подсчета и сравнения с размером сбора в качестве возможного решения ...

ответ

1

Принимая пример из this article:

Future<Iterable<Long>> futuresSequence = sequence(futures); 

// block until the futures come back 
Iterable<Long> results = futuresSequence.get(); 

Похоже, что вы пытаетесь создавать будущее, но вы вложенную коллекцию и фьючерсы неправильного пути вокруг этого, чтобы работать правильно. Попробуйте сделать Future типа Iterable вместо этого, а затем позвоните get в этом будущем.

+0

Thanks Gian, Нет .get() на Futures.sequence в Java под Akka 2.1.2 @ «неправильный путь» - я не объяснил полностью. Это точно так же, как и в статье. При добавлении фьючерсов я хочу собрать их в ArrayList >, а когда я позвоню Futures.sequence(), я получу Future >. –

+0

Я в замешательстве. Вы все еще получаете «будущее». Почему ожидание этого будущего не работает для вашего случая использования? – Gian

4

OK - решить ее, выполнив следующие действия:

Await.result(seq, Duration.create("5 seconds")); 

где

Future<Iterable<Boolean>> seq = Futures.sequence(futures, ec); 

и futures является сбор фьючерсов, то есть ArrayList<Future<Boolean>>.