概念上非常简单。我们有一个巨大的遗留 Java 站点,它不使用线程/异步。登录需要很长时间,因为它对不同的微服务进行了十几次调用,但每次都是同步调用:在进行下一次调用之前,每个都等待另一个完成。但是,没有一个 API 调用依赖于任何其他调用的结果。
但是在我们继续之前,我们确实需要获得所有结果并将它们组合起来。很明显,我们应该能够并行进行这十几个调用,但要等待它们全部完成以在下一步中使用它们的数据。
所以在调用之前和之后一切都是同步的。然而,最好并行地、异步地——或者只是并行地——将它们各自发送出去——那么我们只受到单个最慢调用的限制,而不是所有调用的总连续时间。
我读到 Java 8 在CompletableFuture
. 但我还没有找到任何地方解释我的用途。我们不希望结果成为一个承诺 - 我们很高兴等到它们全部完成然后继续。JS 有Promise.all()
,但即使如此也会返回一个承诺。
我能想到的就是在异步调用完成后稍作等待,只有在我们获得所有结果后才继续。这显然是疯了。
我在这里错过了什么吗?因为这对我来说似乎很明显,但似乎没有其他人对此有疑问——或者方法很简单,没有人费心去问,而我就是不明白。
智慧大石
相关分类