Bu senaryoyu engellenmeyen bir şekilde nasıl çözmem gerektiği konusunda kafam karıştı.
İki aktör düşünün Actor1
ve Actor2
İçinde 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;
}
Şu anda foo_2 içinde, Querylist.get()
engelleme çağrısıdır. Bunu bir şekilde engellenmeyen bir şekilde çözmek istiyorum. Bunun için bir ileti bağdaştırıcısı oluşturdum Actor2
içinde Actor1
yani herhangi bir mesaj Actor2
gönderiler tarafından ele alınacaktır Actor1
.
Engelleme çağrısını değiştirmek için aşağıdaki yaklaşımı kullandım
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;
}
Bir engelleme geleceği ile elde ettiğim aynı sonucu elde etmek için CompletionStage yapısını doğru bir şekilde nasıl kullanacağımdan emin değilim.get () çağrısı.