若我们将两个任务提交到同一个调度队列,哪个将首先执行



创建了自定义调度队列,并将两个任务提交到同一队列,第一个任务为sleep(3(,第二个任务为睡眠(1(。那么为什么第一个任务首先完成执行呢?

let queue = DispatchQueue(label: "name");
queue.async {
Thread.sleep(forTimeInterval: 3)
print("Task1 done")
}
queue.async {
Thread.sleep(forTimeInterval: 1)
print("Task2 done")
}

为了让它们以concurrent的方式执行,您必须使用attributes: .concurrent,如下所示。

let queue = DispatchQueue(label: "name", attributes: .concurrent);
queue.async {

Thread.sleep(forTimeInterval: 3)

print("Task1 done")
}
queue.async {

Thread.sleep(forTimeInterval: 1)

print("Task2 done")
}

如果省略了该部分,那么调度队列将串行执行任务。这就是你正在经历的。

请查看此处的文档。

要与队列关联的属性。包括concurrent属性以创建并发执行任务的调度队列。如果省略该属性,那么调度队列将串行执行任务。

相关内容

  • 没有找到相关文章

最新更新