Sobes.tech
Junior — Middle

Дар кадом қисми иҷрои корутинҳо доир ба он, агар дар дохили он бошад, давраи беохир рух медиҳад?

sobes.tech AI

Ҷавоб аз AI

Агар дар дохили корутина дар Android (масалан, бо истифода аз Kotlin Coroutines) як цикл беохир вуҷуд дошта бошад, ин цикл дар лаҳзаи даъвати худи корутин, яъне вақте ки он оғоз мешавад, яъне дар аввалин даъвати resume ё дар вақти оғоз бо launch ё async иҷро мешавад.

Шумо метавонед корутинро ҳамчун функсияе тасаввур кунед, ки дар он таваққуф ва дубора оғоз кардан мумкин аст. Агар дар бадани корутин як цикл беохир бо нуқтаҳои таваққуф (suspend functions) бошад, он корутинро ба тӯли он, ки он дар он кор мекунад, монеъ мешавад, ки ин цикл беохир иҷро шавад.

Барои пешгирӣ аз монеъ шудан, циклҳои беохир дар корутинҳо одатан дорои даъватҳо ба suspend functions, масалан, delay(), мебошанд, ки имкон медиҳанд корутин таваққуф кунад ва тӯлро озод кунад.

Масалан, як цикл бо таваққуф:

launch {
    while (true) {
        // як кор
        delay(1000) // корутинро барои 1 сония таваққуф мекунад
    }
}

Агар даъватҳо ба delay ё дигар suspend functions набошанд, он гоҳ цикл фавран дар оғоз кардани корутин беохир иҷро мешавад ва тӯлро монеъ мекунад.