0Pricing
Swift Academy · 课时

结构化并发与异步函数

定义 async 函数,使用 await 调用它们,并理解 结构化并发 :子任务会在父作用域退出前完成。

结构化并发与异步函数 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 1 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 3 节课。

为什么使用异步/等待?

异步/等待让您能够编写读起来像同步代码的异步代码。借助结构化并发,子任务与作用域生命周期绑定,不会泄漏。

您的第一个异步函数

异步函数可以等待其他异步工作。在脚本或演练场中创建一个Task来调用它。

// Simulate a short async delay, then return a value
func fetchNumber() async -> Int {
    try? await Task.sleep(nanoseconds: 200_000_000) // ~200ms
    return 42
}

// Call sites must use "await" from an async context or a Task
Task {
    let n = await fetchNumber()
    print("Fetched:", n)  // 42
}

挂起,然后恢复

等待会将任务挂起,直到结果就绪,然后执行会在下一行干净地恢复。

func greet(after seconds: Double) async -> String {
    let ns = UInt64(seconds * 1_000_000_000)
    try? await Task.sleep(nanoseconds: ns)
    return "Hello after \(Int(seconds))s"
}

Task {
    print(await greet(after: 1.0))
    print("Back on the same task after await.")
}

异步绑定基础

使用异步绑定启动子任务。它们属于当前作用域,并且必须在作用域退出前完成等待。

// Run child tasks concurrently within the same scope
func fetchUser() async -> String { "Ana" }
func fetchScore() async -> Int { 90 }

Task {
    async let name = fetchUser()
    async let score = fetchScore()
    // Both start immediately; await joins them before use
    let summary = await "\(name): \(score)"
    print(summary) // "Ana: 90"
    // Scope ends -> child tasks are awaited automatically (structured)
}

父任务与子任务汇合

结构化意味着父任务不能在子任务之前完成。这样可以避免出现孤立工作,并使生命周期更可预测。

// Parent Task encapsulates children lifetimes
func loadProfile() async -> String {
    async let name = fetchUser()
    async let score = fetchScore()
    return await "\(name) (\(score))"
}

Task {
    let profile = await loadProfile()
    print(profile) // e.g., "Ana (90)"
    // loadProfile does not return until its children are done
}

指南

提示:

  • 从任务的角度思考,而不是线程。
  • 使用异步绑定处理同级任务;在作用域退出前使用等待。
  • 演示时使用Task.sleep休眠;实际应用应等待网络或文件输入输出。

等待的定义

快速检查:await会做什么?

回顾

回顾:将函数标记为异步,使用等待调用它们。使用异步绑定启动同级任务,并依靠结构化并发确保子任务先于父任务结束。

常见问题解答

「结构化并发与异步函数」课时是免费的吗?

是的 — 「结构化并发与异步函数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 3 节课。

「结构化并发与异步函数」这节课中我会学到什么?

定义 async 函数,使用 await 调用它们,并理解 结构化并发 :子任务会在父作用域退出前完成。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 3 节。

「结构化并发与异步函数」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Swift Academy 课中编写并运行代码吗?

能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 结构化并发与异步函数
  2. async let、Task 与取消
  3. try await 与错误传播
← 返回 Swift Academy