SC #4: async/await 语法

发布: (2026年1月17日 GMT+8 00:18)
2 分钟阅读
原文: 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 #11:任务组

TaskGroup 一个 TaskGroup 包含动态创建的子任务,可以串行或并发执行。只有当组完成时才被视为结束。

SC #8:取消 Task

Swift 和 SwiftUI 中的 Task 取消 > 注意:在 Swift 中,取消 Task 并不保证执行会立即停止。每个 Task 必须检查更多…

SC #3:与 Swift 6 的关系

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

SC #10:解耦任务

一个脱耦的 Detached Task 以异步方式执行操作,脱离了包裹它的结构化并发上下文。不要继承这个 c...