Я использую GCD на iOS для выполнения трудоемкой задачи в фоновом потоке. В API есть метод start, который принимает два блока в качестве аргументов, оба из которых вызываются в главной очереди. Первый вызывается при запуске задачи, а второй - при завершении задачи. Это все работает.
Мне действительно нужно выполнить несколько из этих трудоемких задач. API позволяет мне запускать их все одновременно, а затем ждать завершения каждого из них и обновлять интерфейс через блоки. Они работают одновременно.
Однако, что я на самом деле хочу сделать, так это упорядочить трудоемкие задачи (по-прежнему запуская каждую с использованием описанного API), чтобы я мог запустить их все одновременно, запустить первый и вызвать его -бэки, затем запустите второй и дайте мне его обратные вызовы и т. д., пока все не будет сделано.
Как лучше всего добиться этого с помощью GCD и блоков?
Если бы задачи были синхронными, я бы просто запустил цикл, который выполнялся каждый по очереди, и выполнял бы все это асинхронно. Но у меня есть обратные вызовы, так что это не сработает. Я бы предпочел не связывать их, так как объект, который все это делает, может исчезнуть, как только он начнет последовательность событий.