Выбор ответа Middle Swift Concurrency спрашивают часто обновлено

Как работает отмена Task

Вопрос

Что происходит при вызове task.cancel()?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Задача помечается отменённой; код сам проверяет отмену. Отмена кооперативная: ставится флаг, который видят Task.isCancelled и Task.checkCancellation().

Варианты ответа

  1. Поток задачи принудительно останавливается, как pthread_cancel
  2. Задача помечается отменённой; код сам проверяет отменуправильный ответ
  3. Задача немедленно бросает CancellationError в любой точке
  4. Отменяются все задачи приложения, включая независимые

Разбор

Отмена кооперативная: ставится флаг, который видят Task.isCancelled и Task.checkCancellation(). Многие async API (Task.sleep, URLSession) на отмену реагируют сами, бросая ошибку. Принудительной остановки потока нет, иначе бы ломались инварианты и ресурсы. В структурированной конкурентности флаг распространяется на дочерние задачи, но не на всё приложение.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.