Назад к вопросам
Middle
395
questionbank

Как запустить два сетевых запроса одновременно с использованием Coroutine в Kotlin?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Чтобы запустить два сетевых запроса одновременно с использованием корутин в Kotlin, можно использовать async.

import kotlinx.coroutines.*

suspend fun fetchUserData(): String {
    delay(1000) // Имитация сетевого запроса
    return "User Data"
}

suspend fun fetchItems(): String {
    delay(1500) // Имитация сетевого запроса
    return "Items Data"
}

suspend fun performConcurrentRequests() = coroutineScope {
    val userDataDeferred: Deferred<String> = async { fetchUserData() }
    val itemsDataDeferred: Deferred<String> = async { fetchItems() }

    val userData = userDataDeferred.await()
    val itemsData = itemsDataDeferred.await()

    println("User Data: $userData")
    println("Items Data: $itemsData")
}

fun main() = runBlocking {
    performConcurrentRequests()
}
  • async запускает новый процесс в параллельной корутине и возвращает Deferred, который является облегченной неблокирующей будущей.
  • await() приостанавливает выполнение до тех пор, пока соответствующая корутина не завершит работу и не вернет результат.
  • coroutineScope создает область видимости, в которой все дочерние корутины отменяются, если какая-либо из них завершается с ошибкой.
  • runBlocking используется здесь для запуска блокирующей функции main в корутине, чтобы можно было вызвать приостанавливаемые функции. В реальном Android-приложении для запуска корутин часто используются другие диспетчеры и области видимости (например, ViewModelScope, LifecycleScope).