Middle
Was ist der Unterschied zwischen launch und async/await in Kotlin?
sobes.tech KI
Antwort von AI
launch startet eine Coroutine, die Arbeit verrichtet und kein Ergebnis zurückgibt. Sie ist für Aufgaben gedacht, die kein blockierendes Warten auf Abschluss erfordern.
async startet eine Coroutine, die Arbeit verrichtet und ein Ergebnis vom Typ Deferred<T> zurückgibt. Um das Ergebnis zu erhalten, wird await() verwendet, das die aktuelle Coroutine bis zum Abschluss der asynchronen Aufgabe pausiert. async/await werden verwendet, wenn das Ergebnis einer asynchronen Operation benötigt wird.
Beispiel für die Verwendung:
// launch - ohne Rückgabewert
fun doSomethingAsync() = GlobalScope.launch {
delay(1000)
println("Arbeit erledigt")
}
// async/await - mit Rückgabewert
suspend fun calculateSomethingAsync(): Int = GlobalScope.async {
delay(1000)
42
}.await()
suspend fun main() {
doSomethingAsync()
val result = calculateSomethingAsync()
println("Ergebnis: $result")
}
Vergleichstabelle der Unterschiede:
| Merkmal | launch | async/await |
|---|---|---|
| Rückgabetyp | Job | Deferred<T> |
| Warten | Blockiert nicht (fire and forget) | Erfordert await() für blockierendes Warten auf Ergebnis |
| Verwendung | Für das Starten von Aufgaben, die kein Ergebnis zurückgeben | Für das Starten von Aufgaben, deren Ergebnis für die weitere Logik benötigt wird |
| Fehlerbehandlung | Über CoroutineExceptionHandler | Über try-catch beim Aufruf von await() |