Как сделать последовательную очередь задач, выполняющихся в основном потоке, с асинхронными обратными вызовами? - PullRequest
0 голосов
/ 06 ноября 2019

В этом случае я должен рассматривать асинхронный callback как часть задачи. Я хочу, чтобы одновременно выполнялась только одна задача.

Вот пример:

func queueATask() {
    DispatchQueue.main.async {
         doSomeHeavyWorkPartA()
         //tunnelProvider is an instance of NETunnelProviderManager
         tunnelProvider.saveToPreferences {
              continueHeavyWorkPartB()
         }
    }
}

Так что я могу сделать несколько вызовов этой функции. Но еще до запуска новой задачи, предыдущейодин должен быть закончен (включая partA и PartB).

queueATask()
queueATask()
queueATask()

Я рассматривал DispatchGroup и DispatchSemaphore, но он должен заблокировать основную очередь, которая не является жизнеспособной? Все задачи должны выполняться в основной очереди. Если бы не было блока обратного вызова partB, это было бы намного проще, я думаю, что это сложная часть в этой ситуации.

Пожалуйста, подскажите мне, как решить эту проблему.

Спасибо

...