You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift iOS:已掌握队列创建与单任务执行,如何并行执行多任务?

在Swift iOS中用队列并行执行多个任务

嘿,既然你已经搞定了队列创建和单任务执行的方法,那实现多任务并行其实非常直接——核心就是利用并发队列的特性,往里面提交多个异步任务就行。咱们结合你给出的队列示例,具体看看怎么操作:

一、自定义并发队列执行并行任务

你定义的concurrentQueue本身就是并发队列,只要多次调用async方法提交任务,这些任务就会被系统调度并行执行:

let concurrentQueue = DispatchQueue(label: "com.some.concurrentQueue", attributes: .concurrent)

// 提交第一个并行任务
concurrentQueue.async {
    print("任务1开始执行")
    // 模拟耗时操作,比如网络请求或数据处理
    Thread.sleep(forTimeInterval: 2)
    print("任务1执行完成")
}

// 提交第二个并行任务
concurrentQueue.async {
    print("任务2开始执行")
    Thread.sleep(forTimeInterval: 1)
    print("任务2执行完成")
}

// 提交第三个并行任务
concurrentQueue.async {
    print("任务3开始执行")
    Thread.sleep(forTimeInterval: 3)
    print("任务3执行完成")
}

运行这段代码你会发现,三个任务几乎同时启动,不会互相等待,最终完成顺序取决于各自的耗时(比如任务2会先完成,然后是任务1,最后是任务3)。

二、全局后台队列执行并行任务

全局队列不管是默认优先级还是指定QoS的,本质都是并发队列,用法和自定义并发队列完全一致:

无优先级默认后台队列

// 提交多个并行任务到默认全局队列
DispatchQueue.global().async {
    print("全局队列任务A开始")
    Thread.sleep(forTimeInterval: 2)
    print("全局队列任务A完成")
}

DispatchQueue.global().async {
    print("全局队列任务B开始")
    Thread.sleep(forTimeInterval: 1)
    print("全局队列任务B完成")
}

带优先级的后台队列

指定QoS(服务质量)只是告诉系统任务的优先级,不影响并行特性,比如用userInitiated优先级:

let highPriorityQueue = DispatchQueue.global(qos: .userInitiated)

highPriorityQueue.async {
    print("高优先级任务X开始")
    Thread.sleep(forTimeInterval: 2)
    print("高优先级任务X完成")
}

highPriorityQueue.async {
    print("高优先级任务Y开始")
    Thread.sleep(forTimeInterval: 1)
    print("高优先级任务Y完成")
}

三、实用技巧:等待所有并行任务完成

如果需要在所有并行任务都结束后执行某些操作(比如更新UI),可以用DispatchGroup来实现:

let concurrentQueue = DispatchQueue(label: "com.some.concurrentQueue", attributes: .concurrent)
let taskGroup = DispatchGroup()

// 提交任务时加入分组
concurrentQueue.async(group: taskGroup) {
    print("分组任务1执行")
    Thread.sleep(forTimeInterval: 2)
}

concurrentQueue.async(group: taskGroup) {
    print("分组任务2执行")
    Thread.sleep(forTimeInterval: 1)
}

// 等待所有分组任务完成后执行回调
taskGroup.notify(queue: DispatchQueue.main) {
    print("所有并行任务都完成了!现在可以更新UI啦")
}

这里的notify方法会在所有任务结束后,切换到指定队列(比如主队列)执行后续操作,非常适合处理并行任务后的收尾工作。

内容的提问来源于stack exchange,提问作者user9364391

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:43:58