Avatar
この前、 freddi さんか誰かが Twitter に、重めの同期処理を別スレッドに投げて非同期に待ちたいみたいなことを書いていて、結局 withTaskGroup で解決したとツイートしてたのを見てから(探したけどツイートを発見できず)、 withGroupTask はちょっと大掛かりな気がして考えてたんだけど、一番シンプルな方法って↓かな? async let x = { print("foo") // 重めの同期処理 return 42 }() print("bar") print(await x) ↓の順で表示されるから、同期関数でもちゃんと child task として実行されている。 bar foo 42 前はよく let x = await Task.detached { print("foo") // 重めの同期処理 return 42 }.value print(x) としてたけど、これだと unstructured concurrency になってしまってキャンセル伝播しないから、 async let の方が良い気がする。 (edited)