Sobes.tech
Junior — Middle

Aký je rozdiel medzi funkciami Job a Deferred v kontexte korutín?

sobes.tech AI

Odpoveď od AI

V Kotlinu sú Job a Deferred dva typy úloh, ktoré predstavujú asynchrónne operácie, ale s rôznymi možnosťami:

  • Job — je základný typ, ktorý predstavuje úlohu bez návratového výsledku. Umožňuje riadiť životný cyklus coroutine: spustiť, zrušiť, sledovať stav.

  • Deferred<T> — je podtrieda Job, ktorá navyše vracia výsledok typu T. Používa sa, keď je potrebné získať výsledok asynchrónnej operácie. Na získanie výsledku sa volá funkcia await(), ktorá pozastaví vykonávanie, kým nie je výsledok pripravený.

Príklad:

val job: Job = launch {
    // vykonáva nejakú prácu bez výsledku
}

val deferred: Deferred<Int> = async {
    // vykonáva prácu a vracia výsledok
    42
}

runBlocking {
    deferred.await() // získať výsledok
}

Hlavný rozdiel je, že Job nevracia výsledok, zatiaľ čo Deferred áno a umožňuje ho získať cez await().