首页 > 解决方案 > 如何在后台线程中按顺序运行任务

问题描述

我有一个数据同步,它应该在后台线程中按顺序发生,因为一个任务需要在开始同步下一个任务之前完成。我尝试在调度队列中执行。但是当进程调度器决定首先执行什么时,我遇到了很多问题。我的部分代码如下。

  DispatchQueue.main.async(execute: {
       SyncAgent.shared.initDataSync()
  }) 


 func initDataSync() {

  //These are not executing in the order. My objective is to make this happen sequentially in the background and notify the relevant screens once its completed. 
   syncUsers()
   syncDevices()
   syncAccouts()
   syncLocations()

 }

标签: swiftasynchronousdispatch-queue

解决方案


要在后台线程(或者说,主线程以外的任何线程)中运行您的函数,您可以尝试创建自定义队列。

例如:

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 也是处理并发任务的灵活工具。)


推荐阅读