I need to perform three tasks that are independent one from each other, so I’d like to execute them concurrently. But I need them all to have finished to notify another object. AFAIK, *dispatch_apply* creates concurrent threads, but it iterates a collection or an array of objects and performs the same task a number of loops, and I want to perform a different task for each thread. Is it possible to do what I want by using GCD? If not, what should be the best way?
Thanks!
Use a
dispatch_group. The Concurrency Programming Guide gives one example, and there is more API that might also help you.Create a dispatch group using
dispatch_group_create.Put each "task" in the group by enqueuing it using
dispatch_group_async.(Or, manually tell GCD when each task starts and stops, using
dispatch_group_enteranddispatch_group_leave.)To run a block when all tasks in the group have completed, enqueue it using
dispatch_group_notify.(Or, in the unlikely case that the design of your app allows you to wait synchronously, use
dispatch_group_waitinstead.)When you’re done with the group,
dispatch_releaseit.