SC #4: async/await 语法
发布: (2026年1月17日 GMT+8 00:18)
2 min read
原文: Dev.to
Source: Dev.to
async/await函数声明
异步函数必须使用关键字 async 标记。
如果函数可能抛出错误,需要在 async 之后添加关键字 throws。
如果函数不会抛出错误,可以省略 throws。
func fetchData() async throws -> Data {
// …
// ❌ 编译错误:必须返回一个值或抛出错误
}
使用 async throws 语法时,函数 必须 返回值或抛出错误。
闭包的使用
在使用闭包时,容易忘记调用它们,这会导致逻辑错误(例如,未通知错误或未返回值)。
func fetchData(_ completion: @escaping (Data?, Error?) -> Void) {
// 未调用 `completion(_: )`,这将是一个错误
}
在同步上下文中使用 Task 运行 async 代码
Task 在同步上下文中创建异步上下文,使得可以在不支持并发的函数中调用 async 方法。
Task {
try await fetchData()
}
如果不使用 Task,会出现错误:
'async' call in a function that does not support concurrency
关键概念
- async:表示函数执行异步工作。
- await:暂停执行,直到异步函数完成。
- throws:传播错误。