Фарқи байни функсияҳои 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() гирифтан мумкин аст.