Последовательная очередь группы отправки

Я пытаюсь понять, каким будет правильный способ создания Serial Dispatch Group для фоновых многопоточных задач. Пример:

У меня есть видео, которое я хочу разделить на 5 частей. Так что в теории это будет цикл очереди:

  • Бежать AVAssetExportSession в фоновом потоке
  • Подождите, пока это закончится
  • Уведомление завершено
  • Бежать AVAssetExportSession в фоновом потоке
  • И так далее и тому подобное

Я копался в уроках по этой проблеме, но не смог найти подходящий способ для достижения этой цели.

Любая помощь будет очень ценной!

С наилучшими пожеланиями, Рой

2 ответа

Решение

Там нет такого понятия, как "группа последовательной отправки". Последовательный / параллельный - это свойство очереди, а не группы.

При условии AVAssetExportSession сам по себе асинхронный процесс, простые попытки добавить его в последовательную очередь не будут работать. Два подхода кажутся логичными. Вы также можете:

  1. Вы можете обернуть exportAsynchronously(completionHandler:) в асинхронном обычае Operation подкласс. Затем вы можете добавить эти пять операций в очередь последовательных операций. Вы можете дать им отдельные блоки завершения, если хотите. И / или вы можете затем выполнить операцию завершения в зависимости от этих пяти операций.

    или же

  2. Вы можете написать рекурсивную функцию, которая выполняет запрос iи в своем обработчике завершения вы можете заставить его вызывать себя для i + 1, И это просто нужно проверить, чтобы увидеть, если i < 5 (или что угодно).

Синхронизация через группы полезна, если задачи должны обрабатываться параллельно и последовательно, а последняя задача неясна. Но ваша проблема полностью серийная.

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

Другие вопросы по тегам