Middle
Jaka jest różnica między launch a async/await w Kotlin?
sobes.tech AI
Odpowiedź od AI
launch uruchamia korutynę, która wykonuje pracę i nie zwraca wyniku. Jest przeznaczona do zadań, które nie wymagają blokującego oczekiwania na zakończenie.
async uruchamia korutynę, która wykonuje pracę i zwraca wynik typu Deferred<T>. Aby uzyskać wynik, używa się await(), które wstrzymuje bieżącą korutynę do czasu zakończenia asynchronicznego zadania. async/await są używane, gdy konieczne jest uzyskanie wyniku z operacji asynchronicznej.
Przykład użycia:
// launch - bez wartości zwrotnej
fun doSomethingAsync() = GlobalScope.launch {
delay(1000)
println("Praca wykonana")
}
// async/await - z wartością zwrotną
suspend fun calculateSomethingAsync(): Int = GlobalScope.async {
delay(1000)
42
}.await()
suspend fun main() {
doSomethingAsync()
val result = calculateSomethingAsync()
println("Wynik: $result")
}
Tabela porównawcza różnic:
| Funkcja | launch | async/await |
|---|---|---|
| Typ zwracany | Job | Deferred<T> |
| Oczekiwanie | Nie blokuje (fire and forget) | Wymaga await() do blokującego oczekiwania na wynik |
| Użycie | Do uruchamiania zadań, które nie wymagają zwrotu wyniku | Do uruchamiania zadań, których wynik jest potrzebny do dalszej logiki |
| Obsługa błędów | Przez CoroutineExceptionHandler | Przez try-catch podczas wywołania await() |