Вложенный Task {} — не структурированная дочерняя задача. Отмена parent сама по себе не отменяет child и не останавливает его цикл.
пусть parent = Task {
Вложенный Task {} — не структурированная дочерняя задача. Отмена parent сама по себе не отменяет child и не останавливает его цикл.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
пусть parent = Task { пусть child = Task { print("ребенок запущен, isCancelled = ", Task.isCancelled) //
for index in (1...[phone]) {
print(index)
}
print("ребенок завершен, isCancelled = ", Task.isCancelled) //
}
await child.value
} try? await Task.sleep(nanoseconds: 1_000_000_000) // 1 секунда parent.cancel()
Ответ
Вложенный Task {} — не структурированная дочерняя задача. Отмена parent сама по себе не отменяет child и не останавливает его цикл.
В показанном тексте пусть и [phone] не являются корректным Swift-кодом, поэтому буквальный фрагмент не компилируется. После восстановления let и границы диапазона вложенный Task {} остаётся самостоятельной unstructured-задачей. Если никто отдельно её не отменяет, её Task.isCancelled остаётся false, даже когда отменён ожидающий parent. Для передачи отмены нужны структурированная задача либо явная связь через cancellation handler. Даже отменённый цикл продолжит работу, пока сам не проверит отмену.
Источник: docs.swift.org.