🔥
Swift Concurrency③:async let とは?
async let を一言で言うと
「同時に走らせたい非同期処理を、一時的な変数に入れて並列実行する仕組み」
イメージ
Task は「箱をつくって処理を走らせる」感じ
async let は 並列で宿題を配って、最後に一気に回収する イメージ」
コードで解説
async let a = fetchUser()
async let b = fetchImage()
// ここで一気に結果を待つ
let (user, image) = await (a, b)
①async let a = fetchUser()
fetchUser()が非同期関数だとして、
async let a = fetchUser()と宣言した時(ここに処理が来た時)にfetchUserの処理が走ります。
つまりこの時点で「ユーザー情報を取ってきて!」というリクエストがスタート。
ただし、まだ結果(値)は手元に来ていません。
②async let b = fetchImage()
同じように画像をとってくると言う処理も同時に走ります。
つまり①のfetchUser()と②のfetchImage()が並列に走ります。
③let (user, image) = await (a, b)
まだa と bの結果待ちの状態
awaitをつけることにより、aとbの処理が終わるまで次の処理に行かなくなります。
そしてaとb両方の処理が完了したら(user, image)に結果が代入される
普通に await fetchUser(); await fetchImage() と書いた場合はどうなる?
await fetchUser()
await fetchImage()
この場合は
fetchUser()が終わったら、fetchImage()が呼ばれる順番になります
一方、async let を使うと
ユーザー情報と画像取得が同時に走るので、全体の待ち時間が短縮できる わけです。
Discussion