Sobes.tech
Middle

Kotlin Coroutines'те негизги класстар кайсылар?

sobes.tech AI

AIден жооп

Kotlin Coroutines-тин негизги класстары жана концепциялары:

  • CoroutineScope: Ичинде ишке ашырылган корутиндердин жашоо циклин аныктайт. Бардык балдар корутиндерин жокко чыгара алат.

  • Job: Корутинге шилтеме. Анын абалын көзөмөлдөөгө, аяктоо үчүн күтүүгө, жокко чыгарууга мүмкүндүк берет.

  • Deferred: Jobтин атайын түрү, кийинчерээк жеткиликтүү боло турган маанини көрсөтөт. Асыңкы эсептөөлөр үчүн колдонулат, натыйжаны кайтарат. Натыйжаны .await() функциясы аркылуу алса болот.

  • Dispatcher: Корутин ишке ашырылуучу жип же жиптер пулун аныктайт. Негизги диспетчерлер:

    • Dispatchers.Default: CPU-интенсивдүү тапшырмалар үчүн оптималдаштырылган. Жалпы пулду колдонуу.
    • Dispatchers.IO: I/O операциялары үчүн оптималдаштырылган (тор, диск). ылайыктуу сандагы жиптерди колдонуу.
    • Dispatchers.Main: UIнин негизги жипи. UI жаңыртуу үчүн. Android жана башка платформаларда ылайыктуу көзкаранды менен жеткиликтүү.
    • Dispatchers.Unconfined: Корутинаны учурдагы жипте баштайт, бирок аны кайра жандандырат suspending-функцияны кайра жандандыруучу кез келген жипте.
  • Suspending function: suspend ачкыч сөзү менен белгиленген жана токтоп, кийинчерээк кайра жандандыра турган функция. Башка suspending-функцияларды чакыра алат.

  • runBlocking: Актуалдуу жипти токтотот бардык корутиналар аяктагандан кийин. Башкача айтканда, тестирлөө жана main функцияларында колдонулат.

  • launch: Жаңы корутинаны баштайт, учурдагы жипти токтотпостон жана Job кайтарат.

  • async: Жаңы корутинаны баштайт, учурдагы жипти токтотпостон жана Deferred кайтарат.

Куллануу мисалдары:

// CoroutineScope, launch жана Dispatchers.IO колдонуу мисалы
import kotlinx.coroutines.*

fun main() = runBlocking {
    // CoroutineScope түзүү
    val scope = CoroutineScope(Dispatchers.IO)

    // IO диспетчеринде корутинаны баштоо
    val job: Job = scope.launch {
        // Тармактык суроо же башка I/O операциясын аткаруу
        delay(1000) // Имитация иши
        println("Корутин ${Thread.currentThread().name}да аяктады")
    }

    // Корутинанын аяктоосун күтүү
    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")
}