首页 > 解决方案 > Swift 在后台线程中按顺序异步运行多个代码块

问题描述

如果下面的代码在同一个线程上,它是否保证按顺序运行?如果没有,有没有办法确保异步后台任务按顺序执行?

DispatchQueue.global().async {
  print("a")
}
DispatchQueue.global().async {
  print("b")
}

标签: iosswiftgrand-central-dispatch

解决方案


DispatchQueue.global()是一个并发队列,这意味着任何 2 个任务将并行运行,无论 1 结束第一个

如果您需要串行运行它们,那么要么一个接一个地链接它们,要么创建一个自定义串行队列并像在其中调度任务一样

let serialQueue = DispatchQueue(label: "queuename")
serialQueue.sync { 
   // task 1
}

serialQueue.sync { 
  // task 2     
}

推荐阅读