swift中task和DispatchQueue有什么区别

32 阅读1分钟

大家好,我的开源项目PakePlus可以将网页/Vue/React项目打包为桌面/手机应用并且小于5M只需几分钟,官网地址:pakeplus.com

Task 和 DispatchQueue 都是 Swift 中处理并发的方式,但它们在设计理念、实现机制和使用方式上有本质区别。适用于不同的方式不同的场合。

DispatchQueue

基于线程池的并发模型

开发者需要手动管理线程和队列

使用命令式编程风格

线程切换:每次 async 调用都可能切换到不同线程

开销较大:线程上下文切换有性能开销

必须手动使用 weak self 避免循环引用

需要手动传递错误

每个任务独立,难以统一管理

没有内置取消机制

在代理类中使用较多

Task

基于协程(coroutine)的并发模型

编译器辅助的结构化并发

使用声明式编程风格

挂起/恢复模型:使用协作式调度,无需线程切换

开销小:挂起时释放线程资源

Task 会自动处理引用计数

与 actor 模型配合提供数据竞争保护

自动等待所有任务完成

内置取消检查,task.cancel()  // 取消任务

编译器保证的线程安全

在UI结构体中或UIKit类使用较多

大家好,我是1024小神,技术群 / 私活群 / 股票群 或 交朋友 都可以私信我。 如果你觉得本文有用,一键三连 (点赞、评论、关注),就是对我最大的支持~