Sobes.tech
Middle

Koje su glavne klase u Kotlin Coroutines?

sobes.tech АИ

Одговор од АИ

Основни класе и концепције у 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("Главна функција завршена")
}
// Пример употребе async и Deferred
import kotlinx.coroutines.*

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

    // Чекање резултата
    val result = deferredSum.await()
    println("Резултат је: $result")
}