我希望解决在Xcode中启用完整并发判断后收到的并发警告.
下面是一个简单的例子来说明警告.假设我有一个ContentView,它在后台线程上有一个长时间运行的任务.当我在Task {...}
的任务中调用长时间运行的任务时,我得到了一个警告:"在主参与者隔离上下文之外传递不可发送类型'ContentView'的参数可能会引入数据竞争".当我在Xcode中启用并发设置以完成时,我会收到这个警告.
我try 了这个建议,使ContentView SREQ,但它会产生额外的警告(见下面的第二张图片),在我的情况下将不起作用.
我该怎么办?感谢任何帮助/指导
参见下面的代码:
struct ContentView: View {
@State private var disable: Bool = false
@State private var value: Double = 0
var body: some View {
VStack {
Button {
disable = true
} label: {
Text("Press")
}
.task {
await value = self.fetchValue() //<---Here is the warning. See image below
}
Text("\(value)")
}
}
}
extension ContentView {
func fetchValue() async -> Double {
//long running task
try? await Task.sleep(nanoseconds: 60)
return 2.0
}
}
以下是警告: