Sobes.tech
Middle

Ի՞նչ է տարբերությունը launch և async/await-ի միջև Kotlin-ում։

sobes.tech AI

Պատասխան AI-ից

launch սկսում է coroutine, որը կատարում է աշխատանք և չի վերադարձնում արդյունք: Այն նախատեսված է այն առաջադրանքների համար, որոնք պահանջում են չխոչընդոտող սպասում ավարտին:

async սկսում է coroutine, որը կատարում է աշխատանք և վերադարձնում արդյունք Deferred<T> տեսքով: Արդյունքը ստանալու համար օգտագործվում է await(), որը ժամանակավոր կանգնեցնում է ընթացիկ coroutine-ը մինչև ասինխրոն աշխատանքը ավարտվի: 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() կանչելիս