Я в замешательстве по поводу того, как я должен разрешить этот сценарий неблокирующим способом.
Рассмотрим двух действующих лиц Actor1
и Actor2
Внутри Actor1
Map<Int, Int> foo() {
List<String> finalList = foo_2();
Map<Int, Int> finalMap = // do stuff with finalList to get Map<Int, Int>;
return finalMap;
}
List<String> foo_2() {
CompletableFuture<List<String>> Querylist = ask(Actor2)
Querylist.get();
return QueryList;
}
В настоящее время в пределах foo_2, Querylist.get()
это блокирующий вызов. Я хочу как-то решить эту проблему неблокирующим способом. Я создал адаптер сообщений для Actor2
внутри Actor1
так что любые сообщения, которые Actor2
отправка будет обрабатываться Actor1
.
Я использовал следующий подход для изменения блокирующего вызова
Map<Int, Int> foo() {
CompletionStage<List<String>> finalList = foo_2();
finalList.whenComplete(
// what to do here?
)
// Map<Int, Int> finalMap = // do stuff with finalList to get Map<Int, Int>;
return finalMap;
}
CompletionStage<List<String>> foo_2() {
CompletionStage<List<String>> Querylist = ask(Actor2)
return QueryList;
}
Я не уверен, как правильно использовать конструкцию CompletionStage, чтобы получить тот же результат, который я получал при вызове блокировки futures.get ().