構造化並行性と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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 構造化並行性とasync関数
- async let、Task、キャンセル
- try awaitとエラーの伝播