Разбор прайса на 40 МБ в Task {} всё равно замораживает интерфейс
@MainActor
final class ImportViewModel: ObservableObject {
@Published var items: [PriceItem] = []
func importFile(_ data: Data) {
Task {
let parsed = PriceParser.parse(data) // синхронно, ~3 секунды
items = parsed
}
}
}
Разработчик ожидал, что Task уведёт работу в фон, но экран на 3 секунды перестаёт реагировать. Почему?
- Task унаследовал главный актор, разбор идёт на нём
- Task всегда выполняется на главном потоке
- Разбор тормозит из-за присваивания @Published
- Task стартует только после отрисовки кадра
