пусть родитель = Задача {

Task {} не наследует отмену как дочерняя задача, а async let участвует в структурированной конкурентности и получает отмену родителя.

Короткий ответ

Что ответить на собеседовании

Task {} не наследует отмену как дочерняя задача, а async let участвует в структурированной конкурентности и получает отмену родителя.

Подробный разбор

Ответ с пояснениями

Условие

пусть родитель = Задача { пусть ребенок = Задача { print("ребенок запущен, isCancelled = ", Task.isCancelled) // NO false

    для индекса в (1...[phone]) {
        print(индекс)
    }

    print("ребенок завершен, isCancelled = ", Task.isCancelled) //
}

ожидать ребенок.значение

} попытка? ожидать Task.sleep(наносекунды: 1_000_000_000) // 1 секунда родитель.отменить()

///////

пусть родитель = Задача { асинхронно пусть ребенок: Пусто = { print("ребенок запущен, isCancelled =", Task.isCancelled)

    для индекса в (1...[phone]) {
        print(индекс)
    }

    print("ребенок завершен, isCancelled =", Task.isCancelled)
}()

ожидать ребенка

} попытка? ожидать Task.sleep(наносекунды: 1_000_000_000) // 1 секунда родитель.отменить()

Ответ

Task {} не наследует отмену как дочерняя задача, а async let участвует в структурированной конкурентности и получает отмену родителя.

Исходник машинно переведён и содержит [phone], поэтому точный вывод восстановить нельзя. В первом варианте внутренний Task {} не отменяется автоматически вызовом parent.cancel(). Во втором async let создаёт структурированного ребёнка: отмена распространяется на него. Однако отмена кооперативна и не прерывает обычный CPU-цикл. Значение последнего isCancelled зависит от того, успел ли цикл завершиться до отмены; для реакции нужны Task.checkCancellation() или проверка флага внутри работы.

Источник: github.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее