在这种情况下,我必须将异步callback
视为任务的一部分。我只希望同时运行一个任务。
这是样板:
func queueATask() {
DispatchQueue.main.async {
doSomeHeavyWorkPartA()
//tunnelProvider is an instance of NETunnelProviderManager
tunnelProvider.saveToPreferences {
continueHeavyWorkPartB()
}
}
}
因此我可以多次调用此函数。但是仍然要在运行新任务之前完成上一个任务(包括partA和PartB)。
queueATask()
queueATask()
queueATask()
我正在考虑DispatchGroup
和DispatchSemaphore
,但是它需要阻止不可行的主队列?所有任务必须在主队列中运行。如果没有partB回调块,它将容易得多,我认为这是解决这种情况的难点。
请指导我如何解决此问题。
谢谢