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:传播错误。
Back to Blog

相关文章

阅读更多 »

SC #3:与 Swift 6 的关系

Swift Concurrency 3 部分系列 https://dev.to/david_goyes_a488f58a17a53/series/35092 “Swift Concurrency” 是 Swift 6 的基石,然而,Swift 6 的定义……