Как работает отмена (cancellation) задач?
Суть
Отмена в Swift Concurrency кооперативная: task.cancel() лишь выставляет флаг и помечает все дочерние задачи в дереве. Никто ничего не прерывает — код обязан сам проверять флаг и сворачиваться. Задача, которая никогда не смотрит на Task.isCancelled, доработает до конца, как будто отмены не было.
Способы отреагировать:
Task.isCancelled— проверить и решить самому, что делать.try Task.checkCancellation()— броситьCancellationError, если отменили.withTaskCancellationHandler(operation:onCancel:)— выполнить код немедленно в момент отмены (закрыть соединение, остановить драйвер), даже если задача сейчас приостановлена.- Большинство системных async-API (
URLSession,Task.sleep,AsyncSequence) проверяют отмену сами и бросаютCancellationErrorилиURLError.cancelled.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep