Sobes.tech
Back to questions
Junior — Middle
73

Можно ли получить результат выполнения функции launch в синхронном режиме?

Companies where asked
Ютека

Answer from AI

sobes.tech AI

Функция launch в Kotlin Coroutines запускает новую сопрограмму и сразу возвращает объект Job. Она не блокирует текущий поток и не возвращает результат выполнения функции, которую запускает. Получить результат выполнения напрямую из launch в синхронном режиме нельзя, так как launch предназначена для запуска задач, которые не возвращают значения.

Если нужно получить результат асинхронной операции, следует использовать async, которая возвращает Deferred<T>. Тогда можно вызвать await() для получения результата, но await() — это приостановка (suspend) и не блокирует поток, а лишь приостанавливает сопрограмму.

Пример:

val job = launch {
    // асинхронная задача
}
// job не содержит результата

val deferred = async {
    // вычисление с результатом
    42
}
runBlocking {
    val result = deferred.await() // получение результата
    println(result) // 42
}

Таким образом, получить результат из launch синхронно нельзя, для этого используют async + await.