Sobes.tech
Назад к вопросам
Junior — Middle
73

Объясните различия между функциями launch, async и runBlocking в контексте корутин Kotlin.

Компании, где спрашивали
АВ Софт

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

sobes.tech AI

В Kotlin корутины позволяют писать асинхронный код проще. Вот различия между launch, async и runBlocking:

  • launch — запускает новую корутину, которая выполняется параллельно, но не возвращает результат. Используется для фоновых задач, где результат не нужен.

  • async — запускает корутину, которая возвращает Deferred<T>, то есть обещание результата. Позволяет получить результат через await(). Используется, когда нужно получить результат асинхронной операции.

  • runBlocking — блокирует текущий поток до завершения корутины. Обычно используется в main-функции или тестах, чтобы запустить корутины из синхронного кода.

Пример:

fun main() = runBlocking {
    launch {
        println("Запущена корутина без результата")
    }

    val deferred = async {
        delay(1000)
        return@async "Результат"
    }

    println("Ожидаем результат: ${deferred.await()}")
}

Здесь runBlocking запускает корутины и ждёт их завершения, launch запускает задачу без результата, async — с результатом.