Sobes.tech
Junior — Middle

Czym różni się użycie funkcji asynchronicznych z słowem kluczowym async od wywołania launch w kontekście programowania asynchronicznego?

sobes.tech AI

Odpowiedź od AI

Słowo kluczowe async jest używane do deklarowania funkcji asynchronicznej, która zwraca obiekt typu Deferred lub Job i może być zawieszona za pomocą funkcji suspend wewnątrz. Wywołanie takiej funkcji nie uruchamia jej automatycznie, lecz zwraca odłożony wynik, który można uzyskać za pomocą await.

launch to funkcja, która uruchamia nową korutynę i natychmiast zaczyna jej wykonywanie. Zwraca obiekt Job, który można użyć do zarządzania cyklem życia korutyny (np. anulowania).

Przykład:

suspend fun fetchData(): String {
    delay(1000)
    return "Dane"
}

fun main() = runBlocking {
    // async zwraca Deferred, wykonanie zaczyna się od razu
    val deferred = async { fetchData() }
    println("Inne zadanie")
    val result = deferred.await() // czekanie na wynik
    println(result)

    // launch uruchamia korutynę, ale nie zwraca wyniku
    val job = launch {
        val data = fetchData()
        println(data)
    }
    job.join() // czekanie na zakończenie
}

Podsumowując:

  • async służy do uruchomienia operacji asynchronicznej z wynikiem.
  • launch uruchamia korutynę bez wartości zwrotnej, dla zadań w tle.
  • async zwraca Deferred, launchJob.