Sunt confuz despre cum ar trebui să rezolve acest scenariu într-un non-blocking mod.
Luați în considerare doi actori Actor1
și Actor2
În 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;
}
În prezent, în cadrul foo_2, Querylist.get()
este un apel de blocare. Vreau pentru a rezolva cumva acest lucru într-un non-blocking mod. Am creat un mesaj adaptor pentru Actor2
în interiorul Actor1
deci, orice mesaje care Actor2
trimite vor fi gestionate de Actor1
.
Am folosit următoarea abordare pentru a modifica apel de blocare
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 nu sunt sigur cum să utilizați în mod corect CompletionStage construct pentru a obține același rezultat am fost cu un blocaj futures.obține() apel.