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")
}