AsyncK

Carthage compatible Swift Package Manager

AsyncK 提供了与此提案中相同的 AsyncawaitbeginAsyncsuspendAsync

以下是使用 async/await 编写的代码

func foo() async -> Int {
    return suspendAsync { continuation in
        // ...
    }
}

func bar(_ x: Int) async -> Int {
    // ...
}

beginAsync {
    let a = await foo()
    let b = await bar(a)
    print(b)
}

可以被重写为如下形式

func foo() -> Async<Int> {
    return suspendAsync { continuation in
        // ...
    }
}

func bar(_ x: Int) -> Async<Int> {
    // ...
}

beginAsync {
    foo().await { a in
        bar(a).await { b -> Void in
            print(b)
        }
    }
}

也可以扁平化 beginAsync 的尾随闭包内部的嵌套。

foo().await { a in
    bar(a)
}.await { b -> Void in
    print(b)
}

许可证

MIT