Sobes.tech
Middle

Millised on Kotlin Coroutines peamised klassid?

sobes.tech AI

Vastus AI-lt

Kotlin Coroutinesi põhiklassid ja kontseptsioonid:

  • CoroutineScope: Määrab korutiinide elutsükli, mis käivitatakse selle sees. Võimaldab tühistada kõik lapsed korutriinid.

  • Job: Esindab viidet korutiinile. Võimaldab jälgida selle olekut, oodata selle lõpetamist, tühistada.

  • Deferred: Eriline Job tüüp, mis esindab väärtust, mis saab olema saadaval hiljem. Kasutatakse asünkroonsete arvutuste jaoks, mis tagastavad tulemuse. Tulemuse saab kätte .await() funktsiooni abil.

  • Dispatcher: Määrab niidi või niidipulga, kus korutiin täidetakse. Peamised dispetcherid:

    • Dispatchers.Default: Optimeeritud CPU-intensiivsete ülesannete jaoks. Kasutab ühispulga niite.
    • Dispatchers.IO: Optimeeritud I/O operatsioonidele (võrk, ketas). Kasutab sobivat niidide arvu.
    • Dispatchers.Main: Peamine UI niit. UI uuendamiseks. Saadaval Androidil ja teistel platvormidel sobiva sõltuvusega.
    • Dispatchers.Unconfined: Käivitab korutina jooksva niidil, kuid jätkab seda mis tahes niidil, mis uuendab suspending-funktsiooni.
  • Suspending function: Funktsioon, mis on märgitud võtmesõnaga suspend ja võib olla peatatud ning hiljem uuesti alustatud. Võib kutsuda teisi suspending-funktsioone.

  • runBlocking: Blokeerib jooksva niidi kuni kõik korutainid on lõpetatud. Kasutatakse peamiselt testimiseks ja main-funktsioonides.

  • launch: Käivitab uue korutina ilma jooksva niidi blokeerimiseta ja tagastab Job.

  • async: Käivitab uue korutina ilma jooksva niidi blokeerimiseta ja tagastab Deferred.

Näited kasutamiseks:

// Näide CoroutineScope, launch ja Dispatchers.IO kasutamisest
import kotlinx.coroutines.*

fun main() = runBlocking {
    // Korutina ulatuse loomine
    val scope = CoroutineScope(Dispatchers.IO)

    // Korutina käivitamine IO dispetcheril
    val job: Job = scope.launch {
        // Võrgu päring või muu I/O operatsioon
        delay(1000) // Imiteerib tööd
        println("Korutina lõppes ${Thread.currentThread().name}" )
    }

    // Oodata korutina lõpetamist
    job.join()
    println("Peafunktsioon lõppes")
}
// Näide kasutades async ja Deferred
import kotlinx.coroutines.*

fun main() = runBlocking {
    val deferredSum: Deferred<Int> = async {
        delay(500)
        1 + 1
    }

    // Oodata tulemust
    val result = deferredSum.await()
    println("Tulemus on: $result")
}