Sobes.tech
Junior — Middle

Koja je razlika između korišćenja asinhronih funkcija sa ključnom reči async i poziva launch u kontekstu asinhronog programiranja?

sobes.tech АИ

Одговор од АИ

Ključna riječ async koristi se za deklarisanje asinhrone funkcije koja vraća objekat tipa Deferred ili Job i može biti suspendovana pomoću unutrašnjih funkcija suspend. Poziv takve funkcije ne pokreće je automatski, već vraća odloženi rezultat koji se može dobiti pomoću await.

launch je funkcija koja pokreće novu korutinu i odmah započinje njeno izvršavanje. Ona vraća objekat Job, koji se može koristiti za upravljanje životnim ciklusom korutine (na primer, otkazivanje).

Primer:

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

fun main() = runBlocking {
    // async vraća Deferred, izvršenje počinje odmah
    val deferred = async { fetchData() }
    println("Obavljam drugi posao")
    val result = deferred.await() // čekanje rezultata
    println(result)

    // launch pokreće korutinu, ali ne vraća rezultat
    val job = launch {
        val data = fetchData()
        println(data)
    }
    job.join() // čekanje završetka
}

Rezime:

  • async se koristi za pokretanje asinhrone operacije sa rezultatom.
  • launch pokreće korutinu bez povratne vrednosti, za pozadinske zadatke.
  • async vraća Deferred, launchJob.