Кадом синфи асосӣ дар 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("Функсияи асосӣ анҷом ёфт")
}
// Маслиҳат барои истифодаи async ва Deferred
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferredSum: Deferred<Int> = async {
delay(500)
1 + 1
}
// интизор шудан барои натиҷа
val result = deferredSum.await()
println("Натиҷа: $result")
}