Middle
Ի՞նչ է 'suspend' ֆունկցիան Kotlin-ում։
sobes.tech AI
Պատասխան AI-ից
Suspend ֆունկցիա — դա ֆունկցիա է, որը կարող է դադարեցվել (suspend) և հետագայում վերականգնվել (resume): Դրանք հիմնարար մաս են Kotlin-ի կորուտինների (coroutines) մեջ և օգտագործվում են ասինխրոնային գործողություններ կատարել առանց հոսքի բլոկավորման:
Հիմնական հատկանիշներ՝
- Կարող է միայն մյուս
suspendֆունկցիայից կամ կորուտինայի կոնտեքստից կանչվել։ Կոմպիլատորը ապահովում է այս սահմանափակումը։ - Չբլոկավորում է հոսքը։ Երբ կատարվում է ասինխրոնային գործողություն (օրինակ՝ ցանցային հարցում),
suspendֆունկցիան դադարեցնում է կորուտինայի կատարմանը, ազատելով հոսքը այլ առաջադրանքների համար։ Երբ ասինխրոնային գործողությունը ավարտվի, կորուտինան շարունակվում է այն տեղից, որտեղ դադարեցվել էր։ - Օգտագործվում է կառուցվածքային համաժամանակության համար։
launchևasyncֆունկցիաների հետ համատեղ, թույլ է տալիս գրել ասինխրոնային կոդը սերիական, հեշտ ընթեռնելի ոճով։ - Կոմպիլատորը վերածում է
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 կատարվում է ոչ բլոկավոր կերպով։