Ի՞նչ հիմնական դասեր կան Kotlin Coroutines-ում։
sobes.tech AI
Պատասխան AI-ից
Կոնցեպցիաներ և հիմնական դասեր Kotlin Coroutines-ում.
-
CoroutineScope: Կարգավորում է coroutine-ների կյանքի ցիկլը, որոնք սկսվում են դրա ներսում: Հնարավոր է բոլոր դուստր coroutine-ները չեղարկել: -
Job: Ներկայացնում է coroutine- ի հենդլը: Հնարավոր է հետևել նրա վիճակին, սպասել ավարտին, չեղարկել: -
Deferred:Job-ի հատուկ տեսակ, որը ներկայացնում է արժեք, որը հասանելի կլինի հետագայում: Օգտագործվում է ասինխրոն հաշվարկների համար, որոնք վերադարձնում են արդյունք: Արդյունքը կարելի է ստանալ.await()-ի միջոցով: -
Dispatcher: Նշում է այն թելն կամ թելերի պուլը, որտեղ կատարվում է coroutine- ը: Հիմնական dispatcher-ները:Dispatchers.Default: Օպտիմալացված CPU-հիմնված առաջադրանքների համար: Օգտագործում է ընդհանուր թելերի պուլ:Dispatchers.IO: Օպտիմալացված I/O-գործառույթների համար (միջանցք, սկավառակի): Օգտագործում է համապատասխան թվով թելեր:Dispatchers.Main: UI- ի հիմնական թելը: UI- ի թարմացումների համար: Հասանելի է Android և այլ հարթակներում համապատասխան կախվածությամբ:Dispatchers.Unconfined: Սկսում է coroutine- ը ընթացիկ թելում, բայց վերականգնում է այն ցանկացած թելում, որը վերականգնում է suspending- ֆունկցիան:
-
Suspending function: Ֆունկցիա, որը նշված էsuspendբանալի բառով և կարող է դադարեցվել և վերականգնվել հետագայում: Կարող է կանչել այլ suspending- ֆունկցիաներ: -
runBlocking: Բլոկավորում է ընթացիկ թելը մինչև բոլոր coroutine-ների ավարտը: Օգտագործվում է հիմնականում թեստավորման և main-ում: -
launch: Սկսում է նոր coroutine առանց ընթացիկ թելի բլոկավորման և վերադարձնումJob: -
async: Սկսում է նոր coroutine առանց ընթացիկ թելի բլոկավորման և վերադարձնումDeferred:
Օրինակներ օգտագործման համար:
// Օրինակ օգտագործման CoroutineScope, launch և Dispatchers.IO
import kotlinx.coroutines.*
fun main() = runBlocking {
// Ստեղծում ենք CoroutineScope
val scope = CoroutineScope(Dispatchers.IO)
// Սկսում ենք coroutine IO dispatcher- ում
val job: Job = scope.launch {
// Կատարում ենք ցանցային հարցում կամ այլ I/O գործողություն
delay(1000) // Իմիտացիա աշխատանքից
println("Coroutine ավարտվեց ${Thread.currentThread().name}-ում")
}
// Սպասում ենք coroutine- ի ավարտին
job.join()
println("Main ֆունկցիան ավարտվեց")
}
// Օրինակ օգտագործման async և Deferred
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferredSum: Deferred<Int> = async {
delay(500)
1 + 1
}
// Սպասում արդյունքին
val result = deferredSum.await()
println("Արդյունքը է: $result")
}