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:
asynckasutatakse asünkroonse operatsiooni alustamiseks tulemusega.launchalustab taustatööde jaoks tulemusteta korutina.asynctagastabDeferred,launch—Job.