如何使用@ModelActor在后台线程执行SwiftData操作?
如何在后台线程使用SwiftData的@ModelActor执行操作?
- 我不清楚如何在后台线程执行SwiftData操作,每次调用我的
@ModelActor时,所有代码都运行在主线程。 - 我在网上看到必须在后台线程实例化它,但实例化后它的方法仍在主线程执行,查阅executor相关内容也没找到可行方案。

编辑:似乎在.task {}中调用MainActor是问题根源?
以下是我的代码:
import SwiftUI import SwiftData @Model class User { var id: UUID init(id: UUID) { self.id = id } } @MainActor final class SomeMainActor {} @main struct MyApp: App { var body: some Scene { WindowGroup { ContentView() .task { do { let savedUserProvider = try await SavedUserProvider.createOnBackground() let someMainActor = SomeMainActor() await savedUserProvider.updateUser() } catch {} } } } } @ModelActor actor SavedUserProvider { static func createOnBackground() async throws -> SavedUserProvider { await Task.detached(priority: .background) { let container: ModelContainer = { let schema = Schema([ User.self ]) let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false) do { return try ModelContainer(for: schema, configurations: [modelConfiguration]) } catch { fatalError("Could not create ModelContainer: \(error)") } }() return SavedUserProvider(modelContainer: container) }.value } func updateUser() { print() // Runs on main thread } }
有没有人成功使用ModelActor在后台线程完成SwiftData更新?
内容的提问来源于stack exchange,提问作者Xys
相关产品推荐
相关产品推荐

