【问题标题】:Swift: how to wrap `completion` into an async/await?Swift:如何将“完成”包装到异步/等待中?
【发布时间】:2021-12-22 10:41:22
【问题描述】:

我有一个基于回调的 API。

func start(_ completion: @escaping () -> Void)

我想在该 API 之上编写一个 async/await 包装器,将实现推迟到基于原始回调的 API。

func start() async {
    let task = Task()
    start { 
        task.fulfill()
    }
    
    return await task
}

显然,这段代码没有连接——它不是真实的,Task 上没有方法 fulfill

问题:有没有办法在 Swift 中使用非结构化并发来帮助我实现这一目标?

【问题讨论】:

  • 你在找continuations
  • 哦...哈,那不是很长...我很乐意接受这个作为正确答案,如果您将复制粘贴这个作为答案... :)

标签: swift asynchronous async-await swift-concurrency


【解决方案1】:

您正在寻找continuations

这是在您的示例中使用它的方法:

func start() async {
    await withCheckedContinuation { continuation in
        start(continuation.resume)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-31
    • 2014-04-03
    • 2013-08-19
    • 2020-10-04
    • 1970-01-01
    • 2020-02-22
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多