Task、TaskGroup、actor 的作用分别是什么 swift
Task、 类比oc的NSOperation 能设置优先级、可取消任务 但是没有操作依赖
TaskGroup、类比oc的DispatchGroup和OperationQueue 等待多张图片下载完合成一张图片
actor 类比oc的信号量dispatch_semaphore 加锁 控制并发
这是 Swift 并发(Swift Concurrency) 面试里的核心三件套,几乎必问。下面我给你一个面试可直接说的答案,再加一层稍微深入的对比,方便你应对追问。 一、面试标准答案(推荐背) 1️⃣ Task —— 执行异步任务的单元 作用: • 用来启动并管理一个异步任务 • 是 Swift 并发中最基本的执行单位 特点: • 可以在同步上下文中启动异步代码 • 支持优先级、取消、父子关系 Task { let result = try await fetchData() } ✅ 适合:单个异步任务 2️⃣ TaskGroup —— 并发执行多个子任务 作用: • 用来创建一组并发执行的子任务 • 支持动态数量任务、统一生命周期管理 特点: • 所有子任务完成后,group 才算完成 • 自动传播取消 await withTaskGroup(of: Int.self) { group in group.addTask { 1 } group.addTask { 2 } for await value in group { print(value) } } ✅ 适合:并发执行多个任务并收集结果 3️⃣ actor —— 保护可变状态的并发安全类型 作用: • 提供一种安全的并发访问模型 • 防止数据竞争(Data Race) 特点: • 本质是引用类型(类似 class) • 内部状态只能由 actor 自己修改 • 外部访问必须 await actor Counter { private var value = 0 func increment() { value += 1 } } ✅ 适合:并发环境下的共享可变状态 二、一句话对比(面试加分) 概念 核心作用 Task 执行单个异步任务 TaskGroup 并发执行多个任务 actor 保证并发访问安全 三、它们之间的关系(进阶理解) • Task 是执行体 • TaskGroup 是 Task 的组织者 • actor 是被 Task 安全访问的对象 ✅ 常见组合模式: Task { await withTaskGroup(of: Void.self) { group in group.addTask { await counter.increment() } } } 四、常见面试追问 & 标准答法 Q:Task 会自动切换线程吗? ✅ 是的 • 由 Swift 并发运行时调度 • 不需要手动 DispatchQueue Q:actor 和 class 的区别? 对比 actor class 并发安全 ✅ ❌ 访问方式 await 直接 本质 引用类型 引用类型 Q:TaskGroup 和 async let 的区别? 对比 TaskGroup async let 任务数量 动态 静态 复杂度 高 低 推荐 多任务 少量任务 五、一句终极总结(面试收尾) Task 负责执行异步任务,TaskGroup 负责并发组织任务,actor 负责在并发环境中安全地保护状态,三者共同构成了 Swift 的结构化并发模型。
在北京的灯中,有一盏是我家的。这个梦何时可以实现?哪怕微微亮。北京就像魔鬼训练营,有能力的留,没能力的走……

浙公网安备 33010602011771号