小编gds*_*gds的帖子

Swift wait/async - 如何同步等待异步任务完成?

我正在 Swift 中桥接同步/异步世界,并逐步采用异步/等待。我正在尝试调用一个从非异步函数返回值的异步函数。我知道显式使用Task是执行此操作的方法,例如,如此处所述

该示例并不真正适合,因为该任务不返回值。

经过多次搜索,我无法找到任何我认为很常见的问题的描述:异步任务的同步调用(是的,我知道这可能会冻结主线程)。

理论上我想在同步函数中编写的是:

let x = Task {
  return await someAsyncFunction()
}.result
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这样做时,由于尝试访问而出现此编译器错误result

'async' property access in a function that does not support concurrency

我发现的一种替代方案是这样的:

Task.init {
  self.myResult = await someAsyncFunction()
}
Run Code Online (Sandbox Code Playgroud)

其中myResult必须归属为@State成员变量。

然而,这并没有按照我想要的方式工作,因为不能保证在Task.init()完成并进入下一个语句之前完成该任务。那么我怎样才能同步等待该任务完成呢?

swift swift-concurrency

47
推荐指数
3
解决办法
4万
查看次数

标签 统计

swift ×1

swift-concurrency ×1