Sobes.tech
Junior — Middle

Ի՞նչ տարբերություն կա async բանալի բառով ասինխրոն ֆունկցիաների օգտագործման և launch-ի կանչի միջև ասինխրոն ծրագրավորման համատեքստում։

sobes.tech AI

Պատասխան AI-ից

Բանալին async օգտագործվում է ասինխրոն ֆունկցիա հայտարարելու համար, որը վերադարձնում է Deferred կամ Job տիպի օբյեկտ և կարող է լինել դադարեցված ներքին suspend ֆունկցիաների միջոցով: Այդպիսի ֆունկցիայի կանչումը ինքնին չի սկսում այն, այլ վերադարձնում է հետաձգված արդյունք, որը կարելի է ստանալ await-ի միջոցով:

launch — դա ֆունկցիա է, որը սկսում է նոր կորուտին և անմիջապես սկսում է նրա կատարմանը: Այն վերադարձնում է Job օբյեկտ, որը կարելի է օգտագործել կորուտինի կյանքի ցիկլը կառավարելու համար (օրինակ, չեղարկելու համար):

Օրինակ՝

suspend fun fetchData(): String {
    delay(1000)
    return "Տվյալներ"
}

fun main() = runBlocking {
    // async վերադարձնում է Deferred, կատարմանը սկսվում է անմիջապես
    val deferred = async { fetchData() }
    println("Կատարում եմ այլ աշխատանք")
    val result = deferred.await() // սպասում արդյունքին
    println(result)

    // launch սկսում է կորուտին, բայց չի վերադարձնում արդյունք
    val job = launch {
        val data = fetchData()
        println(data)
    }
    job.join() // սպասում ավարտին
}

Ամփոփում՝

  • async օգտագործվում է որպես արդյունքով ասինխրոն գործողություն սկսելու համար:
  • launch սկսում է ֆոնային աշխատանքների համար արդյունք չպահող կորուտին:
  • async վերադարձնում է Deferred, launchJob։