0Pricing
Swift Academy · レッスン

構造化並行性とasync関数

async 関数を定義し、 await で呼び出します。また、 構造化並行性 について学びます。子タスクは親のスコープが終了する前に完了します。

「構造化並行性とasync関数」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全3レッスンが含まれています。

なぜ async/await なのでしょうか

async/awaitを使うと、同期コードのように読める非同期コードを書けます。構造化並行性により、子タスクはスコープの存続期間に結び付けられるため、リークが発生しません。

最初の async 関数

async関数は、他の非同期処理をawaitできます。スクリプトやプレイグラウンドで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
}

中断してから再開

awaitは結果が準備できるまでタスクを中断し、その後、次の行から実行を自然に再開します。

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.")
}

async let の基本

async letを使うと子タスクを開始できます。子タスクは現在のスコープに属し、スコープを抜ける前に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
}

ガイドライン

ヒント:

  • スレッドではなく、タスク単位で考えます。
  • 兄弟処理にはasync letを使い、スコープを抜ける前にawaitします。
  • デモではTask.sleepを使ってスリープさせ、実際のアプリではネットワークやファイルI/Oをawaitします。

await の定義

確認問題: awaitは何をしますか?

まとめ

まとめ: 関数にasyncを付け、awaitで呼び出します。async letで兄弟タスクを開始し、構造化並行性によって親より先に子を終了させます。

よくある質問

「構造化並行性とasync関数」レッスンは無料ですか?

はい。「構造化並行性とasync関数」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全3レッスンが含まれています。

「構造化並行性とasync関数」で何を学びますか?

async 関数を定義し、 await で呼び出します。また、 構造化並行性 について学びます。子タスクは親のスコープが終了する前に完了します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。

「構造化並行性とasync関数」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 構造化並行性とasync関数
  2. async let、Task、キャンセル
  3. try awaitとエラーの伝播
← Swift Academyに戻る