我有一个数据同步,应该在后台线程中按顺序进行同步,因为一个任务需要先完成才开始同步下一个任务。我尝试在调度队列中执行。但是随后,当流程调度程序决定要执行什么时,我遇到了很多问题。我的部分代码如下。
127.0.0.1:9150
答案 0 :(得分:0)
要在后台线程(或主线程以外的任何线程)中运行函数,可以尝试创建自定义队列。
例如:
let myQueue = DispatchQueue(label: "serial") // DispatchQueue is serial by default
myQueue.asyc {
// 1st function
}
myQueue.asyc {
// 2nd function
}
串行DispatchQueue确保按添加顺序调用添加到其中的功能。
但是,如果希望第二个函数等待第一个函数的结果,则可以例如在每个函数中添加一个completionHandler以在完成后调用下一个函数:
func doSomething(completionHandler: () -> Void) {
// do something
// ...
// call completionHandler when everything is finished
completionHandler()
}
或使用DispatchGroup通知每个作业何时完成。这实际上取决于您的任务的复杂性。 (此外,Operation API也是处理并发任务的灵活工具。)