Sobes.tech
Middle

Ի՞նչ հիմնական դասեր կան 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")
}