Выбор ответа Middle Swift Concurrency спрашивают часто обновлено

async let и параллельная загрузка

Вопрос

Как загрузить профиль и ленту параллельно и дождаться обоих?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: async let p = loadProfile(); async let f = loadFeed(), затем await. async let запускает дочерние задачи сразу, а await забирает результаты.

Варианты ответа

  1. let p = await loadProfile(); let f = await loadFeed()
  2. async let p = loadProfile(); async let f = loadFeed(), затем awaitправильный ответ
  3. Task.detached { await loadProfile() }, затем await loadFeed()
  4. DispatchQueue.concurrentPerform с двумя вызовами await внутри

Разбор

async let запускает дочерние задачи сразу, а await забирает результаты. Два последовательных await выполняют загрузки одна за другой. Task.detached выходит из структурированной конкурентности: родитель не ждёт и не отменяет задачу. concurrentPerform синхронный API GCD и не умеет await. Для заранее неизвестного числа задач нужен withTaskGroup.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.