We often find ourselves in a situation where we have to wait for multiple asynchronous blocks to finish before we can proceed. One such case is even described in Apple’s Concurrency Programming Guide. It can be easily done using dispatch groups functions. But things may get complicated when the code inside each of your blocks makes other asynchronous calls. And it’s the completion of the latter ones that you want to be notified of.