Concurrency|Swift 6.2 让并发更容易控制
Swift Concurrency 实际上包含异步和并发两个部分,他们是不同的概念:
- 异步:async/await 语法,让代码不阻塞当前线程,后续代码可以继续执行。
- 并发:使用 Task 与 Actor 等并发原语,控制任务在哪个线程执行。
以下是关于 Swift Concurrency 的几个核心:
1 - 使用异步,并不意味着一定在后台线程执行
实际上,在大部分情况下,任务仍然在调用它的线程中执行 —— 这避免了数据竞争的问题,但仍然可能运行卡顿。
对于耗时但轻量级的任务,使用异步能很好的解决卡顿问题,最常见的场景是处理网络请求。然而,对于一些非常消耗性能的繁重任务,如果在主线程执行,即使使用异步语法,也会导致运行卡顿 —— 因为主线程资源可能被耗尽。
2 - 可以使用 Task 控制任务执行的线程
理想情况下,对于繁重的任务,应当将它从主线程剥离分派到后台线程执行,从而保证 App 界面运行流程 —— 你确实可以使用 Task/Task.detach 来实现这一点。
然而,让跨线程执行任务的难点在于“如何确保它们的数据同步”,这可能会导致大量和数据竞争相关的并发错误,你需要手动处理这些问题 —— 这正是并发编程最困难的地方。
Swift 从 5.0 开始引入的 Sendable、Actor 等语法,都是为了解决数据竞争的问题。
3 - 系统 API 导致的并发错误
即使你没有显式将任务分派到后台线程执行,Swift 框架的一些系统级 API,仍然可能导致数据竞争错误。因为某些系统级 API 可能会强制让任务在后台线程执行,例如图像处理相关 API。
在 Swift 6.2 中,Swift Concurrency 在几个方面做了重大更新,让并发编程变得更容易控制。
Xcode 26 Beta 1
推荐在 Xcode 26 中启用如下配置。


这是 By 项目设置,而非全局有效,因此需要在每个 Project 中都进行改设置。
默认安全
从 Swift 6.2 开始,所以代码默认在主线程执行,包括系统 API。
仅在你需要的时候,手动引入并发编程,例如,
- 需要使用网络请求:引入异步
- 需要使用大计算量:引入并发
新的 @concurrent 宏
它提供了一种从 actor 切换的机制,允许非隔离方法在不同的隔离域中运行。

@concurrent
告诉 Swift 在后台运行该函数。同时,Xcode 编译器会帮助发现并发错误:
