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,launch—Job.