Sobes.tech
Middle

Тафовут байни launch ва async/await дар Kotlin чист?

sobes.tech AI

Ҷавоб аз AI

launch корутинаны ишга тушуруп, ишти аткарып, натыйжаны кайтарбайт. Ал блоктогон күтүүнү талап кылбаган тапшырмалар үчүн арналган.

async корутинаны ишга тушуруп, ишти аткарып, Deferred<T> түрүндөгү натыйжаны кайтарат. Натыйжаны алуу үчүн await() колдонулат, ал учурдагы корутинаны асинхрон иш аяктагандан кийин токтотот. async/await асинхрон операциянын натыйжасын алуу керек болгондо колдонулат.

Колдонуу мисалы:

// launch - кайтарымсыз
fun doSomethingAsync() = GlobalScope.launch {
    delay(1000)
    println("Иш аяктады")
}

// async/await - кайтарым менен
suspend fun calculateSomethingAsync(): Int = GlobalScope.async {
    delay(1000)
    42
}.await()

suspend fun main() {
    doSomethingAsync()

    val result = calculateSomethingAsync()
    println("Натыйжа: $result")
}

Аермалардын салыштырма таблицасы:

Өзгөчөлүк launch async/await
Кайтаруу түрү Job Deferred<T>
Күтүү Блоктогон эмес (fire and forget) Натыйжаны күтүү үчүн await() талап кылынат
Колдонуу Натыйжа кайтарбаган тапшырмаларды ишке киргизүү үчүн Натыйжасы керек болгон тапшырмаларды ишке киргизүү үчүн
Катуу ката менен иштөө CoroutineExceptionHandler аркылуу try-catch аркылуу await() чакырганда