常用异步API速查
Swift的异步编程提供了丰富的API,涵盖任务管理、并发控制、线程安全和异步数据流等方面。本节整理了常用异步API的速查表,包括功能说明和简短示例,帮助你在开发中快速查找和使用这些工具。本速查表基于本书内容,旨在为你的异步编程提供便捷参考。
速查表
| 分类 | API/语法 | 功能说明 | 示例 |
|---|---|---|---|
| 基础异步调用 | async / await | 标记异步函数和等待结果,构建异步逻辑的核心。 | swift<br>func fetch() async -> String {<br> return "数据"<br>}<br>let data = await fetch() |
throws / try | 在异步函数中抛出和捕获错误,统一错误处理。 | swift<br>func fetch() async throws -> String {<br> throw Error()<br>}<br>do { try await fetch() } catch {} | |
| 任务管理 | Task { } | 创建一个异步任务,运行独立代码块,可指定优先级。 | swift<br>Task(priority: .high) {<br> let data = await fetch()<br> print(data)<br>} |
Task.detached { } | 创建不继承上下文的独立任务,不受父任务取消影响。 | swift<br>Task.detached {<br> await Task.sleep(nanoseconds: 1_000_000_000)<br> print("独立")<br>} | |
Task.isCancelled | 检查任务是否被取消,协作式取消机制。 | swift<br>if Task.isCancelled { return } | |
Task.checkCancellation() | 检查取消状态并抛出CancellationError,简化取消逻辑。 | swift<br>try Task.checkCancellation() | |
| 结构化并发 | withTaskGroup { } | 创建任务组,管理一组并行任务,统一收集结果(无错误)。 | swift<br>let sum = await withTaskGroup(of: Int.self) { group in<br> group.addTask { 1 }<br> return await group.reduce(0, +)<br>} |
withThrowingTaskGroup { } | 创建任务组,支持抛出错误,适合并行任务可能失败的场景。 | swift<br>try await withThrowingTaskGroup(of: Int.self) { group in<br> group.addTask { 1 }<br> return try await group.reduce(0, +)<br>} | |
| 线程安全 | actor | 定义线程安全的Actor类型,隔离状态,串行访问。 | swift<br>actor Counter {<br> var count = 0<br> func increment() { count += 1 }<br>}<br>await counter.increment() |
@MainActor | 将代码绑定到主线程,确保UI操作安全。 | swift<br>@MainActor func updateUI() {<br> label.text = "更新"<br>}<br>await updateUI() | |
MainActor.run { } | 在主线程执行一次性代码块,临时切换线程。 | swift<br>await MainActor.run { label.text = "临时更新" } | |
| 异步数据流 | AsyncSequence / for await | 异步遍历序列,处理流式数据(如网络流)。 | swift<br>for await item in AsyncStream { print(item) } |
AsyncStream | 创建自定义异步序列,动态生成元素。 | swift<br>let stream = AsyncStream { continuation in<br> continuation.yield(1)<br> continuation.finish()<br>}<br>for await value in stream { print(value) } | |
| 错误与取消 | withCheckedThrowingContinuation | 将闭包回调转为异步调用,桥接遗留API。 | swift<br>func fetchAsync() async throws -> String {<br> try await withCheckedThrowingContinuation { continuation in<br> fetch { data, error in<br> if let error = error { continuation.resume(throwing: error) }<br> else { continuation.resume(returning: data!) }<br> }<br> }<br>} |
| 性能与调试 | Task.sleep(nanoseconds:) | 异步休眠指定时间,用于模拟延迟或测试。 | swift<br>try await Task.sleep(nanoseconds: 1_000_000_000) |
os_log (OSLog) | 记录异步任务日志,轻量级调试工具。 | swift<br>import os.log<br>os_log(.info, log: OSLog.default, "任务开始") |
使用建议
- 优先结构化并发:尽可能使用
Task和Task Group,避免分散的Detached Task。 - 线程安全第一:UI操作始终绑定
@MainActor,共享状态用Actor隔离。 - 错误处理统一:通过
throws和do-catch集中处理异常。 - 调试辅助:结合
os_log和Thread Sanitizer,定位问题。 - 性能优化:减少不必要的
await和线程切换,批量操作。
小结
本速查表整理了Swift异步编程的核心API,从基础调用到并发控制、线程安全和调试工具,为你提供了一个快速参考的清单。这些API贯穿本书内容,是构建健壮异步代码的基础。下一节将提供附录,包含更详细的参考资料和常见问题解答,助你进一步深化理解。
内容说明
- 结构:以表格形式整理API,包含分类、功能和示例,最后提供使用建议和总结。
- 代码:每个API附带简短示例,突出实用性。
- 语气:简洁性且实用性,适合技术书籍速查章节。
- 衔接:承接前节(总结),预告后续(附录)。
