Выбор ответа Middle Swift Concurrency спрашивают часто обновлено
async let и параллельная загрузка
Вопрос
Как загрузить профиль и ленту параллельно и дождаться обоих?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: async let p = loadProfile(); async let f = loadFeed(), затем await. async let запускает дочерние задачи сразу, а await забирает результаты.
Варианты ответа
let p = await loadProfile(); let f = await loadFeed()async let p = loadProfile(); async let f = loadFeed(), затемawaitправильный ответTask.detached { await loadProfile() }, затемawait loadFeed()DispatchQueue.concurrentPerformс двумя вызовамиawaitвнутри
Разбор
async let запускает дочерние задачи сразу, а await забирает результаты. Два последовательных await выполняют загрузки одна за другой. Task.detached выходит из структурированной конкурентности: родитель не ждёт и не отменяет задачу. concurrentPerform синхронный API GCD и не умеет await. Для заранее неизвестного числа задач нужен withTaskGroup.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.