func makeAsync<T>(_: ((T) -> ()) -> ()) async -> Tfunc foo() async -> Int { return await makeAsync { emit in DispatchQueue.main.asyncAfter(deadline: .now + 5.0) { emit(42) } } } (edited)func makeAsync<T>(_: ((T) -> ()) throws -> ()) async rethrows -> Tdo - defer 相当のものは同期化というのがあり得る気がしてるんですが、現実的にはノンブロッキング化する方が必要だろうなと。func pureInt() -> Int { do { return await asyncInt() } wait }catch によく対応してるような気はします。func doAsync(_: () async -> ()) みたいな。 (edited)