相关疑难解决方法(0)

“Task”在调用内部异步函数时会阻塞主线程

我有一个ObservableObject类和一个 SwiftUI 视图。当点击按钮时,我会在其中创建Task并调用(异步函数)。populate我以为这会populate在后台线程上执行,但整个 UI 都冻结了。这是我的代码:

class ViewModel: ObservableObject {
    @Published var items = [String]()
    func populate() async {
        var items = [String]()
        for i in 0 ..< 4_000_000 { /// this usually takes a couple seconds
            items.append("\(i)")
        }
        self.items = items
    }
}

struct ContentView: View {
    @StateObject var model = ViewModel()
    @State var rotation = CGFloat(0)

    var body: some View {
        Button {
            Task {
                await model.populate()
            }
        } label: { …
Run Code Online (Sandbox Code Playgroud)

ios async-await swift swiftui swift-concurrency

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

标签 统计

async-await ×1

ios ×1

swift ×1

swift-concurrency ×1

swiftui ×1