Java - async thenCompose 内部的同步调用
Java - sync call inside async thenCompose
考虑下面的代码,因为我找不到更好的词来问这个问题:
CompletionStage<Manager> callingAsyncFunction(int developerId) {
return getManagerIdByDeveloperId(developerId)
.thenCompose(id ->
getManagerById(id, mandatoryComputationToGetManager(id)))
}
mandatoryComputationToGetManager()
returns一个CompletionStage
现在我的疑问是:
我想调用 mandatoryComputationToGetManager()
,在计算之后我希望调用 getManagerById(...)
。
我知道可以有一种方法,即先调用 thenCompose()
来执行 mandatoryComputationToGetManager()
,然后根据 getManagerById()
的先前结果执行另一个 thenCompose()
。但是我想弄清楚是否有一种方法可以不通过管道将一个 thenCompose()
o/p 传送到另一个我可以一直保持到 mandatoryComputationToGetManager()
结果准备就绪的方法。
据我了解,在上面的代码中 getManagerById()
将被调用,即使 mandatoryComputationToGetManager()
的结果尚未准备好,我想等待一次 [=12] =] 给出结果 getManagerById()
应该异步计算。
理想情况下,我们应该通过管道将一个 thenCompose o/p 传递给另一个,但是有一种方法可以实现您想要做的事情。
CompletionStage<String> callingAsyncFunction(int developerId) {
return getManagerIdByDeveloperId(developerId)
.thenCompose(id -> getManagerById(id, mandatoryComputationToGetManager()));
}
private CompletionStage<String> getManagerById(
Integer id, CompletionStage<String> stringCompletionStage) {
return stringCompletionStage.thenApply(__ -> "test");
}
private CompletionStage<String> mandatoryComputationToGetManager() {
return CompletableFuture.completedFuture("test");
}
考虑下面的代码,因为我找不到更好的词来问这个问题:
CompletionStage<Manager> callingAsyncFunction(int developerId) {
return getManagerIdByDeveloperId(developerId)
.thenCompose(id ->
getManagerById(id, mandatoryComputationToGetManager(id)))
}
mandatoryComputationToGetManager()
returns一个CompletionStage
现在我的疑问是:
我想调用 mandatoryComputationToGetManager()
,在计算之后我希望调用 getManagerById(...)
。
我知道可以有一种方法,即先调用 thenCompose()
来执行 mandatoryComputationToGetManager()
,然后根据 getManagerById()
的先前结果执行另一个 thenCompose()
。但是我想弄清楚是否有一种方法可以不通过管道将一个 thenCompose()
o/p 传送到另一个我可以一直保持到 mandatoryComputationToGetManager()
结果准备就绪的方法。
据我了解,在上面的代码中 getManagerById()
将被调用,即使 mandatoryComputationToGetManager()
的结果尚未准备好,我想等待一次 [=12] =] 给出结果 getManagerById()
应该异步计算。
理想情况下,我们应该通过管道将一个 thenCompose o/p 传递给另一个,但是有一种方法可以实现您想要做的事情。
CompletionStage<String> callingAsyncFunction(int developerId) {
return getManagerIdByDeveloperId(developerId)
.thenCompose(id -> getManagerById(id, mandatoryComputationToGetManager()));
}
private CompletionStage<String> getManagerById(
Integer id, CompletionStage<String> stringCompletionStage) {
return stringCompletionStage.thenApply(__ -> "test");
}
private CompletionStage<String> mandatoryComputationToGetManager() {
return CompletableFuture.completedFuture("test");
}