Как в Swift с async/await выполнить два метода параллельно, дождаться их, затем вызвать третий метод?

«Как в Swift с async/await выполнить два метода параллельно, дождаться их, затем вызвать третий метод?» — вопрос из категории Многопоточность, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, для этого используется async let для запуска параллельных задач и await для ожидания их завершения. Это позволяет эффективно использовать время, пока задачи выполняются.

Пример:

func processData() async {
    // 1. Параллельный запуск двух асинхронных методов
    async let data1 = fetchFirstData()
    async let data2 = fetchSecondData()

    // 2. Ожидание завершения обеих задач
    let result1 = await data1
    let result2 = await data2

    // 3. Вызов третьего метода с результатами
    let combined = await processResults(result1, result2)

    // 4. Последующие действия
    await updateUI(combined)
}

Ключевые моменты:

  • async let создаёт child task, которая выполняется параллельно с текущей задачей
  • Порядок await не важен для параллелизма — задачи уже запущены
  • Если одна из задач завершится ошибкой, другая будет отменена
  • Для явной отмены используйте TaskGroup с обработкой ошибок