Sobes.tech
Junior — Middle

Каква е разликата между използването на асинхронни функции с ключовата дума async и извикването на launch в контекста на асинхронното програмиране?

sobes.tech AI

Отговор от AI

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

launch е функция, която стартира нова корутина и веднага започва нейното изпълнение. Тя връща обект Job, който може да се използва за управление на жизнения цикъл на корутината (например, анулиране).

Пример:

suspend fun fetchData(): String {
    delay(1000)
    return "Данни"
}

fun main() = runBlocking {
    // async връща Deferred, изпълнението започва веднага
    val deferred = async { fetchData() }
    println("Правя други неща")
    val result = deferred.await() // чака резултата
    println(result)

    // launch стартира корутина, но не връща резултат
    val job = launch {
        val data = fetchData()
        println(data)
    }
    job.join() // чака завършването
}

Обобщение:

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