Sobes.tech
Middle

Kotlin'da 'suspend' funksiyasi nima?

sobes.tech AI

AIdan javob

Suspend функция — буга, унинни тўхтатиш (suspend) ва кейинчалик қайта бошлаш (resume) мумкин бўлган функция. Улар Kotlinдаги корутинларнинг асосий қисми бўлиб, асинхрон операцияларни блокламасдан бажариш учун ишлатилади.

Асосий хусусиятлар:

  • Бўлишича, фақат бошқа suspend функциясидан ёки корутин контекстида чақирилади. Компилятор бу чекловни таъминлайди.
  • Тўхтатмайди. Асинхрон операцияни (масалан, тармоқ сўрови) бажаришда, suspend функция корутинни тўхтатади, ва тўғри келганда, у қайтиб ишга тушади.
  • Тузилган параллелизм учун ишлатилади. launch ва async каби функциялар билан бирга, асинхрон кодни оддий ва осон ўқиладиган услубда ёзиш имконини беради.
  • Компилятор suspend функцияларни охирги автоматларга айлантиради. Бу корутиннинг ҳолатини сақлашга ёрдам беради.

Misol:

import kotlinx.coroutines.*

suspend fun fetchData(): String {
    // Асинхрон операцияни имитация қилиш (масалан, тармоқ сўрови)
    delay(1000) // тўхтатиш нуқталари
    return "Маълумот юкланди"
}

fun main() = runBlocking {
    println("Юклашни бошлаймиз...")
    val data = fetchData() // suspend функцияни чақириш
    println(data)
    println("Юклаш тугади")
}

Бу ерда, fetchDatasuspend функция, у delay (бошқа бир suspend функцияси) билан имитация қилади. delay — тўхтатиш нуқтаси. runBlocking — корутин ҳудуди яратади, у mainни блокловчи тўрқинча қилиб ишга туширади, аммо унутмасдан, fetchData асинхрон равишда бажарилади.