Последовательная очередь группы отправки
Я пытаюсь понять, каким будет правильный способ создания Serial Dispatch Group для фоновых многопоточных задач. Пример:
У меня есть видео, которое я хочу разделить на 5 частей. Так что в теории это будет цикл очереди:
- Бежать
AVAssetExportSession
в фоновом потоке - Подождите, пока это закончится
- Уведомление завершено
- Бежать
AVAssetExportSession
в фоновом потоке - И так далее и тому подобное
Я копался в уроках по этой проблеме, но не смог найти подходящий способ для достижения этой цели.
Любая помощь будет очень ценной!
С наилучшими пожеланиями, Рой
2 ответа
Там нет такого понятия, как "группа последовательной отправки". Последовательный / параллельный - это свойство очереди, а не группы.
При условии AVAssetExportSession
сам по себе асинхронный процесс, простые попытки добавить его в последовательную очередь не будут работать. Два подхода кажутся логичными. Вы также можете:
Вы можете обернуть
exportAsynchronously(completionHandler:)
в асинхронном обычаеOperation
подкласс. Затем вы можете добавить эти пять операций в очередь последовательных операций. Вы можете дать им отдельные блоки завершения, если хотите. И / или вы можете затем выполнить операцию завершения в зависимости от этих пяти операций.или же
Вы можете написать рекурсивную функцию, которая выполняет запрос
i
и в своем обработчике завершения вы можете заставить его вызывать себя дляi + 1
, И это просто нужно проверить, чтобы увидеть, еслиi < 5
(или что угодно).
Синхронизация через группы полезна, если задачи должны обрабатываться параллельно и последовательно, а последняя задача неясна. Но ваша проблема полностью серийная.
Почему бы вам не использовать только последовательную очередь для ваших целей? Вы можете добавить пять блоков в эту очередь, и они будут выполнены в нужном порядке. Вы также можете решить свою проблему с помощью одного блока, работающего в фоновом режиме.