Sobes.tech
Junior — Middle

Jaký je rozdíl mezi použitím asynchronních funkcí s klíčovým slovem async a voláním launch v kontextu asynchronního programování?

sobes.tech AI

Odpověď od AI

Klíčové slovo async se používá k deklaraci asynchronní funkce, která vrací objekt typu Deferred nebo Job a může být pozastavena pomocí vnitřních funkcí suspend. Volání takové funkce ji nespustí automaticky, ale vrací odložený výsledek, který lze získat pomocí await.

launch je funkce, která spouští novou korutinu a ihned začíná její provádění. Vrací objekt Job, který lze použít k řízení životního cyklu korutiny (například zrušení).

Příklad:

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

fun main() = runBlocking {
    // async vrací Deferred, provádění začíná ihned
    val deferred = async { fetchData() }
    println("Dělám jinou práci")
    val result = deferred.await() // čeká na výsledek
    println(result)

    // launch spouští korutinu, ale nevrací výsledek
    val job = launch {
        val data = fetchData()
        println(data)
    }
    job.join() // čeká na dokončení
}

Shrnutí:

  • async se používá k spuštění asynchronní operace s výsledkem.
  • launch spouští korutinu bez návratové hodnoty, pro úlohy na pozadí.
  • async vrací Deferred, launchJob.