Sobes.tech
Junior — Middle

Is het mogelijk om het resultaat van de uitvoering van de launch-functie synchron te krijgen?

sobes.tech AI

Antwoord van AI

De functie launch in Kotlin Coroutines start een nieuwe coroutine en geeft onmiddellijk een Job-object terug. Het blokkeert de huidige thread niet en geeft niet het resultaat van de functie die het start. Het is niet mogelijk om direct het resultaat van launch synoniem te verkrijgen, omdat launch bedoeld is voor het starten van taken die geen waarden retourneren.

Als je het resultaat van een asynchrone operatie wilt krijgen, moet je async gebruiken, dat een Deferred<T> retourneert. Vervolgens kun je await() aanroepen om het resultaat te krijgen, maar await() is een suspensie (suspend) en blokkeert de thread niet, het pauzeert alleen de coroutine.

Voorbeeld:

val job = launch {
    // asynchrone taak
}
// job bevat geen resultaat

val deferred = async {
    // berekening met resultaat
    42
}
runBlocking {
    val result = deferred.await() // resultaat verkrijgen
    println(result) // 42
}

Dus, het is niet mogelijk om het resultaat van launch synoniem te verkrijgen, daarvoor wordt async + await gebruikt.