Этот вопрос проверяет понимание моделей structured и unstructured concurrency в современном Swift.
Structured concurrency означает что задачи имеют чёткую иерархию и lifetime, привязанный к родительской задаче. Unstructured concurrency позволяет создавать независимые задачи, которые не привязаны к scope родителя. Structured подход безопаснее и проще для управления.
Swift concurrency model introduces эти концепции для управления lifetime задач.
1. Structured concurrency:
Задачи создаются within a specific scope и наследуют его context.
Родительская задача ожидает завершения дочерних.
Автоматическая отмена при отмене родителя.
Пример: async let и task groups.
2. Unstructured concurrency:
Задачи живут independently от создавшего их scope.
Не наследуют context автоматически.
Пример: Task.detached и Task.init.
Пример:
// Structured
func fetchData() async {
async let first = loadFirst()
async let second = loadSecond()
let results = await (first, second)
}
// Unstructured
Task.detached {
// Не наследует context
}