Sobes.tech
Back to questions
Junior — Middle
77

Чем отличается использование асинхронных функций с ключевым словом async от вызова launch в контексте асинхронного программирования?

Companies where asked
ИннотехИннотех
Movavi

Answer from AI

sobes.tech AI

Ключевое слово async используется для объявления асинхронной функции, которая возвращает объект типа Deferred или Job и может быть приостановлена с помощью suspend функций внутри. Вызов такой функции не запускает её выполнение автоматически, а возвращает отложенный результат, который можно получить с помощью await.

launch — это функция, которая запускает новую корутину и сразу начинает её выполнение. Она возвращает объект Job, который можно использовать для управления жизненным циклом корутины (например, отмены).

Пример:

suspend fun fetchData(): String {
    delay(1000)
    return "Data"
}

fun main() = runBlocking {
    // async возвращает Deferred, выполнение начинается сразу
    val deferred = async { fetchData() }
    println("Doing other work")
    val result = deferred.await() // ждем результат
    println(result)

    // launch запускает корутину, но не возвращает результат
    val job = launch {
        val data = fetchData()
        println(data)
    }
    job.join() // ждем завершения
}

Итого:

  • async используется для запуска асинхронной операции с возвращаемым результатом.
  • launch запускает корутину без возвращаемого значения, для фоновых задач.
  • async возвращает Deferred, launchJob.