Ожидание выполнения двух асинхронных блоков перед запуском другого блока

При использовании GCD мы хотим дождаться выполнения и завершения двух асинхронных блоков, прежде чем переходить к следующим шагам выполнения. Как лучше всего это сделать?

Мы пробовали следующее, но это не работает:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
    // block1
});


dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
    // block2
});

// wait until both the block1 and block2 are done before start block3
// how to do that?

dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
    // block3
});
182
задан Rob 26 January 2013 в 08:31
поделиться