Sobes.tech
Middle

Функсияи 'suspend' дар Kotlin чист?

sobes.tech AI

Ҷавоб аз AI

Функсияи suspend — ин функсияест, ки метавонад боздошта (suspend) ва баъдтар идома ёбад (resume). Онҳо қисми асосии корутинҳо дар Kotlin мебошанд ва барои иҷрои амалҳои асинхронӣ бидуни бастани сӯзишворӣ истифода мешаванд.

Хусусиятҳои калидӣ:

  • Мумкин аст танҳо аз дигар функсияи suspend ё аз контексти корутин даъват шавад. Компилятор ин маҳдудиятро таъмин мекунад.
  • Намегузорад сӯзишвориро банд кунад. Дар вақти иҷрои амалиёти асинхронӣ (масалан, дархости шабакавӣ), функсияи suspend иҷрои корутинро бозмедорад, ва сӯзишвориро барои дигар вазифаҳо озод мекунад. Вақте, ки амалиёти асинхронӣ ба анҷом мерасад, корутин аз ҷое, ки боздошта буд, идома медиҳад.
  • Барои параллелизми сохторӣ истифода мешавад. Дар ҳамоҳангӣ бо функсияҳое, монанди launch ва async аз китобхонаи kotlinx.coroutines, имкон медиҳад, ки кодҳои асинхронӣ дар услуби пайдарпай ва осон ба хондан навишта шаванд.
  • Компилятор функсияҳои suspend-ро ба автоматҳои охирӣ табдил медиҳад. Ин имкон медиҳад, ки ҳолати корутин байни нуқтаҳои боздоштан нигоҳ дошта шавад.

Масалан:

import kotlinx.coroutines.*

suspend fun fetchData(): String {
    // Имитацияи амалиёти асинхронӣ (масалан, дархости шабакавӣ)
    delay(1000) // нуқтаҳои боздоштан
    return "Маълумот бор карда шуд"
}

fun main() = runBlocking {
    println("Оғоз мекунем боркунӣ...")
    val data = fetchData() // даъвати функсияи `suspend`
    println(data)
    println("Боркунӣ анҷом ёфт")
}

Ин ҷо, fetchData — функсияи suspend, ки бо истифода аз delay (як функсияи suspend дигар) барои имитация кардани таъхир истифода мешавад. delay нуқтаи боздоштан аст. runBlocking як доираи корутинро месозад барои иҷрои main ҳамчун сӯзишвории бандӣ, аммо дар дохили он fetchData ба таври асинхронӣ иҷро мешавад.