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() կանչելիս |