等待一组异步Java调用的轻量级方法

ric*_*ich 8 java asynchronous synchronous

我们在一个阻塞方法中编写了一些代码,它们异步调用多个慢速第三方服务.这些异步调用包含在实现相同接口方法的代码中.我们希望触发异步调用并等待它们全部返回后再返回我们的阻塞方法调用.

我希望这很清楚!

有没有合适的设计模式/库来实现它...它必须是一个相当常见的模式.提前致谢.

mae*_*ics 9

您可以使用CountDownLatch初始化的异步调用次数,并让每个异步处理程序递减锁存器."外部"阻止方法只需"等待"完整倒计时,例如:

// Untested, Java pseudocode...
public void awaitAllRemoteCalls() {
    final CountDownLatch allDoneSignal = new CountDownLatch(N);
    // For each remote N calls...
    thirdPartyAsyncCall.call(new AsyncHandler(Object remoteData) {
        // Handle the remote data...
        allDoneSignal.countDown();
    });
    allDoneSignal.await();
}
Run Code Online (Sandbox Code Playgroud)