Вступить в клуб →
средняявопросSwift Concurrency: Task, акторы и MainActor

Экспорт 10 000 заказов продолжается после нажатия «Отмена»

exportTask = Task {
    for order in orders {                 // 10 000 заказов
        rows.append(Formatter.csvRow(order))  // синхронно
    }
    try await uploader.upload(rows)
}

// кнопка «Отмена»
exportTask?.cancel()

После «Отмены» цикл доходит до конца, процессор загружен ещё 8 секунд. Что добавить?

  • Проверять отмену в цикле: Task.checkCancellation()
  • Вызывать cancel() дважды для надёжности
  • Заменить Task на Task.detached
  • Обнулять exportTask после cancel()

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела