Estou confuso sobre como eu deveria resolver essa situação sem bloqueio maneira.
Considere dois atores Actor1
e Actor2
Dentro 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;
}
Atualmente dentro foo_2, Querylist.get()
é uma chamada de bloqueio. Quero de alguma forma de resolver isso sem bloqueio maneira. Eu criei uma mensagem adaptador para Actor2
dentro Actor1
assim, todas as mensagens que Actor2
envia serão tratadas pelo Actor1
.
Eu usei a seguinte abordagem para modificar a chamada de bloqueio
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;
}
Eu não tenho certeza de como usar corretamente o CompletionStage construir para obter o mesmo resultado que eu estava ficando com um bloqueio de futuros.get() chamada.