実行環境
>swift --version swift-driver version: 1.90.11.1 Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4) Target: arm64-apple-macosx14.0 >xcodebuild -version Xcode 15.3 Build version 15E204a
モチベーション
以前Swift Concurrencyメインスレッドクイズを書いたが、まだまだ理解が浅いなと思って関連のWWDCのセッションを見返したりswift-evolutionを読んでクイズを新たに作った。クイズ作ると定着している感じがあって良い。今回は前回と比べて簡単め。
Question 1
答えと解説
答え
約7秒
解説
await
キーワードによって処理が終わるまで下には進まずに上から順に実行される。よって、Task.sleep(nanoseconds:)
の秒数の合計の7秒となる。
Question 2
答えと解説
答え
約5秒
解説
async let
バインディングと await
キーワードによって、戻り値が代入されるタイミングまで処理を待つため、Task.sleep(nanoseconds:)
の秒数の最大値の5秒となる。
- https://github.com/apple/swift-evolution/blob/main/proposals/0317-async-let.md#implicit-async-let-awaiting
- https://github.com/apple/swift-evolution/blob/main/proposals/0317-async-let.md#custom-executors-and-async-let
Question 3
答えと解説
答え
約0秒
解説
await
キーワードが無く、 Task.sleep(nanoseconds:)
の完了を待たずにメソッドの処理が終わってしまうため、0秒となる。