Sobes.tech
Junior — Middle

Mis vahe on asünkroonsete funktsioonide kasutamisel koos võtmesõnaga async ja launchi kutsumisel asünkroonse programmeerimise kontekstis?

sobes.tech AI

Vastus AI-lt

Võtmesõna async kasutatakse asünkroonse funktsiooni deklaratsiooniks, mis tagastab objekti tüüpi Deferred või Job ning mida saab peatada sisemiste suspend funktsioonide abil. Sellise funktsiooni kutsumine ei käivita seda automaatselt, vaid tagastab edasi lükatud tulemuse, mille saab kätte await abil.

launch on funktsioon, mis käivitab uue korutina ja alustab selle täitmist kohe. See tagastab objekti Job, mida saab kasutada korutina elutsükli haldamiseks (näiteks tühistamiseks).

Näide:

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

fun main() = runBlocking {
    // async tagastab Deferred, täitmine algab kohe
    val deferred = async { fetchData() }
    println("Teine töö")
    val result = deferred.await() // ootan tulemust
    println(result)

    // launch käivitab korutina, kuid ei taga tulemust
    val job = launch {
        val data = fetchData()
        println(data)
    }
    job.join() // ootan lõpetamist
}

Kokkuvõte:

  • async kasutatakse asünkroonse operatsiooni alustamiseks tulemusega.
  • launch alustab taustatööde jaoks tulemusteta korutina.
  • async tagastab Deferred, launchJob.