В этом случае я должен рассматривать асинхронный callback
как часть задачи. Я хочу, чтобы одновременно выполнялась только одна задача.
Вот пример:
func queueATask() {
DispatchQueue.main.async {
doSomeHeavyWorkPartA()
//tunnelProvider is an instance of NETunnelProviderManager
tunnelProvider.saveToPreferences {
continueHeavyWorkPartB()
}
}
}
Так что я могу сделать несколько вызовов этой функции. Но еще до запуска новой задачи, предыдущейодин должен быть закончен (включая partA и PartB).
queueATask()
queueATask()
queueATask()
Я рассматривал DispatchGroup
и DispatchSemaphore
, но он должен заблокировать основную очередь, которая не является жизнеспособной? Все задачи должны выполняться в основной очереди. Если бы не было блока обратного вызова partB, это было бы намного проще, я думаю, что это сложная часть в этой ситуации.
Пожалуйста, подскажите мне, как решить эту проблему.
Спасибо