Как в Coroutines выполнять задачи параллельно

«Как в Coroutines выполнять задачи параллельно» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для параллельного выполнения задач в Coroutines можно использовать async в сочетании с awaitAll.

suspend fun fetchDataParallel() = coroutineScope {
    val deferred1 = async { fetchData1() }
    val deferred2 = async { fetchData2() }
    val results = awaitAll(deferred1, deferred2) // [result1, result2]
}

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

  • async запускает корутину и возвращает Deferred<T>.
  • awaitAll ожидает завершения всех Deferred.
  • Работает внутри coroutineScope, чтобы отменить все дочерние корутины при ошибке.

Если нужно ограничить параллелизм, используйте Dispatchers.IO или Semaphore.