Sobes.tech
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()