Avatar
omochimetaru 6/26/2023 7:24 AM
handleButtonClicked から辿ってみていくと、 Swift Concurrencyで管理しているスレッド (Task.init のbody)の中で、 whileによるビジーループをしているのが、Swift Concurrencyの規則に違反していてぶっ壊れているような気がします。 echo がうまくいくのは、プロセスが一瞬で終了するために、最初のwhileに入らずに済んでいるからかも。 1. echo "start" && sleep 3 && echo "end" だったらうまくいきますか? 2. 0.5秒のsleepを終了待ちではなく whileループの中に入れたらどうなりますか? 3. async版executeの withCheckedThrowingContinuation の冒頭で、同期版 execute の実行を専用に用意したDispatchQueueに退避したらどうなりますか? 4(おまけ) Process.waitUntilExit という便利なメソッドがありますよ。