Вы хотите использовать группы рассылки. Сначала вы создаете группу, планируете трех рабочих в группе, затем добавляете блок уведомлений в группу.
Это должно выглядеть примерно так:
//create dispatch group
dispatch_group_t myWorkGroup = dispatch_group_create();
//get one of the global concurrent queues
dispatch_queue_t myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL);
//submit your work blocks
dispatch_group_async(myWorkGroup, myQueue, worker1);
dispatch_group_async(myWorkGroup, myQueue, worker2);
dispatch_group_async(myWorkGroup, myQueue, worker3);
//set the mergeBlock to be submitted when all the blocks in the group are completed
dispatch_group_notify(myWorkGroup, myQueue, mergeBlock);
//release the group as you no longer need it
dispatch_release(myWorkGroup);
Вы можете повесить группу и использовать ее позже, если хотите. Обязательно наметьте работу до уведомления. Если вы сначала попытаетесь запланировать уведомление, оно будет отправлено немедленно.
Я не тестировал этот код, но я использую dispatch_groups в своих проектах.