We're writing some code, in a single blocking method, which calls out to multiple, slow third party services asynchronously. These async calls are wrapped in code that implement the same interface method. We wish to fire off the async calls and wait until they've all returned before returning our blocking method call.
I hope that's clear!
Is there a suitable design pattern / library for implementing this... it must be a fairly common pattern. Thanks in advance.
You could use a
CountDownLatch
initialized with the number of async calls and have each async handler decrement the latch. The "outer" blocking method would simply "await" for the full countdown, e.g.:I'm not sure how you're doing things, but I'd have whatever starts the async tasks (preferably by using an
Executor
) return aFuture<?>
for each task you start. Then you'd simply need to put all theFuture<?>
s in aCollection
and iterate through it callingget()
:I've left out exception handling for
get()
here, but that's the general idea.