Task 与任务取消
创建结构化任务,检查取消状态并实现协作式取消。
Task 与任务取消 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。
欢迎
`Task` 是 Swift 中并发的基本单位。它可以运行异步工作,并支持结构化取消,从而实现干净的资源管理。
创建任务
```swift
Task {
let user = try await fetchUser(id: 1)
print(user.name)
}
```
`Task` 会创建新的并发执行上下文。
任务优先级
```swift
Task(priority: .userInitiated) { await loadContent() }
Task(priority: .background) { await prefetch() }
Task(priority: .utility) { await syncData() }
```
Task.cancel()
```swift
var task: Task?
func startLoading() {
task = Task { await heavyWork() }
}
func stopLoading() {
task?.cancel()
}
```
检查取消状态
```swift
func process() async throws {
for item in items {
try Task.checkCancellation() // throws if cancelled
process(item)
}
}
```
Task.isCancelled
```swift
func stream() async {
while !Task.isCancelled {
let data = await fetch()
emit(data)
}
}
```
分离任务
```swift
Task.detached(priority: .background) {
// NOT inheriting actor context or priority of the caller
await heavyBackgroundWork()
}
```
withTaskCancellationHandler
```swift
await withTaskCancellationHandler {
await doWork()
} onCancel: {
cleanup()
}
```
任务返回值
```swift
let task = Task { 6 * 7 }
let result = await task.value // 42
```
休眠
```swift
try await Task.sleep(for: .seconds(2)) // Swift 5.7+
try await Task.sleep(nanoseconds: 1_000_000_000) // 1 second
```
快速检查
如果任务已被取消,哪个方法会抛出 `CancellationError`?
回顾
要点:
• `Task { }` — 创建异步工作单元
• `task.cancel()` + `Task.checkCancellation()` — 协作式取消
• `Task.isCancelled` — 轮询式检查
• `Task.detached` — 不继承参与者或优先级
• `Task.sleep(for:)` — 非阻塞延迟
下一课:async let。
常见问题解答
「Task 与任务取消」课时是免费的吗?
是的 — 「Task 与任务取消」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。
「Task 与任务取消」这节课中我会学到什么?
创建结构化任务,检查取消状态并实现协作式取消。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Swift Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「Task 与任务取消」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Swift Academy 课中编写并运行代码吗?
能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。