我正在 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()完成并进入下一个语句之前完成该任务。那么我怎样才能同步等待该任务完成呢?