Sobes.tech
Junior — Middle

Фарқи байни функсияҳои Job ва Deferred дар контексти корутинҳо чист?

sobes.tech AI

Ҷавоб аз AI

Дар Kotlin, Job ва Deferred ду навъи вазифаҳо мебошанд, ки амалҳои асинхронӣ-ро намояндагӣ мекунанд, аммо бо имкониятҳои гуногун:

  • Job — навъи асосӣ мебошад, ки вазифаи бе натиҷаи баргардонро намояндагӣ мекунад. Он имкон медиҳад, ки давраи ҳаёти корутинро назорат кунед: оғоз кардан, бекор кардан, ҳолати онро пайгирӣ кардан.

  • Deferred<T> — зери синфи Job аст, ки натиҷаи навъи T-ро иловатан бармегардонад. Он вақте истифода мешавад, ки бояд натиҷаи амали асинхронӣ гирифта шавад. Барои гирифтани натиҷа, функсияи await()-ро даъват мекунанд, ки иҷроиро то омодагии натиҷа бозмедорад.

Масалан:

val job: Job = launch {
    // иҷрои коре бе натиҷа
}

val deferred: Deferred<Int> = async {
    // иҷрои кор ва баргардонидани натиҷа
    42
}

runBlocking {
    deferred.await() // гирифтани натиҷа
}

Бинобар ин, фарқи асосӣ дар он аст, ки Job натиҷа намегардонад, дар ҳоле ки Deferred — медиҳад ва онро тавассути await() гирифтан мумкин аст.