while ループでフラグの更新を待つ時は Task.yield() が便利

Swift の Task.yield() は、非同期タスクから実行を一時停止して、他のタスクが実行されるようにするために利用するAPIです。よきタイミングでスレッドを譲ることで、CPU負荷の高い処理を効率的に実行することができたりします。

developer.apple.com

この Task.yield() はある状態が担保されているかを待つなどの while ループ でも使うことができます。

// isFoo = false になるまで Task.yield() し続ける
while isFoo {
    await Task.yield()
}

非同期処理の中の while ループで Task.yield() を使うことで、後続処理に進むのにある状態を担保しつつ不必要な sleep をしなくて済むということができるという学びでした。