Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpCrPr 161 of 299 menu
◀ ▶

Параллельный результат в Kotlin

Когда нужен не только факт завершения, но и результат вычисления, launch заменяют на async. Он тоже стартует корутину, но возвращает Deferred - дескриптор с будущим значением. Метод await приостанавливает вызывающую корутину, пока результат не будет готов.

Два независимых расчета удобно запустить параллельно и сложить ответы после обоих await:

import kotlinx.coroutines.async import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking fun main() { runBlocking { val left = async { delay(50) 3 } val right = async { delay(50) 4 } val sum = left.await() + right.await() println(sum) } }

Пока обе задачи ждут паузу, они идут одновременно. В консоли появляется 7 - сумма готовых чисел, а не время двух пауз подряд.

Тот же прием работает со строками и другими типами, если лямбда возвращает значение:

import kotlinx.coroutines.async import kotlinx.coroutines.runBlocking fun main() { runBlocking { val partA = async { "co" } val partB = async { "de" } val word = partA.await() + partB.await() println(word) } }

Параллельно получите числа 10 и 25 в двух фоновых вычислениях с короткой паузой в каждом. Выведите их произведение.

Две задачи возвращают строки "run" и "ner". Склейте результаты и напечатайте получившееся слово.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить