Avatar
ちがうか。↓みたいなのがあればいいのか。 func makeAsync<T>(_: ((T) -> ()) -> ()) async -> T
2:42 AM
func foo() async -> Int { return await makeAsync { emit in DispatchQueue.main.asyncAfter(deadline: .now + 5.0) { emit(42) } } } (edited)
2:44 AM
現実的にはエラーが起こることも考えて↓かな。 func makeAsync<T>(_: ((T) -> ()) throws -> ()) async rethrows -> T
2:45 AM
@tarunon それってエラーからの回復だから、非同期処理に対応させると同期化だと思うんですよね。
2:46 AM
なので、 do - defer 相当のものは同期化というのがあり得る気がしてるんですが、現実的にはノンブロッキング化する方が必要だろうなと。
2:46 AM
もし同期化であれば
2:47 AM
↓みたいな感じになるのかな・・・。 func pureInt() -> Int { do { return await asyncInt() } wait }
2:48 AM
こっちの方が理論上は catch によく対応してるような気はします。
2:49 AM
ノンブロッキングの方は、そういう関数があればいいだけな気もしますね・・・。 func doAsync(_: () async -> ()) みたいな。 (edited)