Size: a a a

Kotlin Community

2020 July 08

AI

Arkadii Ivanov in Kotlin Community
Eugene P.
Ну Rx не кроссплатформенная штука
Если что, есть мультиплатформенный Rx. И да, там есть Amb. 😉
источник

KD

Konstantin Dovnar in Kotlin Community
Alexander Nozik
Просто в корутинах для передачи единственного сообщения не надо использовать Flow вообще. Это закидон RX, от которого надо отказываться. Используйте Deferred + select
Речь как-раз не о единственном сообщении.

У тебя есть 2+ флоу, которые могут сыпать значениями и с помощью amb останется лишь тот источник, что первым прислал значение. Остальные завершаются, остаётся только тот первый.
источник

AM

Andrew Mikhaylov in Kotlin Community
Konstantin Dovnar
Речь как-раз не о единственном сообщении.

У тебя есть 2+ флоу, которые могут сыпать значениями и с помощью amb останется лишь тот источник, что первым прислал значение. Остальные завершаются, остаётся только тот первый.
Да уже ниже разобрались вроде :)
источник

EP

Eugene P. in Kotlin Community
Arkadii Ivanov
Если что, есть мультиплатформенный Rx. И да, там есть Amb. 😉
Имеете в виду Reaktive от Badoo?
источник

EP

Eugene P. in Kotlin Community
Подскажите, почему данный код https://pl.kotl.in/XSgupezU8 верно отрабатывается в песочнице, т.е. при отмене родительской job awaitClose вызывается и для дочерней job, а на компьютере нет?
источник

EP

Eugene P. in Kotlin Community
источник

EP

Eugene P. in Kotlin Community
Это какие-то разные версии библиотек?
источник

EP

Eugene P. in Kotlin Community
Версия Kotlin 1.3.72 на компьютере и в песочнице
источник

EP

Eugene P. in Kotlin Community
Версия корутин 1.3.7 на компьютере (какая в песочнице - не знаю)
источник

RE

Roman Elizarov in Kotlin Community
Скорей всего дочернаяя корутина даже и не успевает запуститься.
источник

RE

Roman Elizarov in Kotlin Community
Добавьте println(“Started xxx”) в начало каждой корутины (сразу внутри callbackFlow) чтобы видеть что там происходит.
источник

RE

Roman Elizarov in Kotlin Community
источник

EP

Eugene P. in Kotlin Community
Удивительно, заработало
источник

EP

Eugene P. in Kotlin Community
Спасибо
источник

EP

Eugene P. in Kotlin Community
Почему добавление простого println меняет логику таймаутов?
источник

EP

Eugene P. in Kotlin Community
А хотя, иногда child не успевает запуститься
источник

EP

Eugene P. in Kotlin Community
Т.е. выводит
Started parent
Closing parent
источник

RE

Roman Elizarov in Kotlin Community
ЧТД
источник

EP

Eugene P. in Kotlin Community
Спасибо еще раз
источник

МR

М R in Kotlin Community
Привет!
Можете помочь? Я в тупик зашёл. Имеется вот такой пример.
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Default)

fun main() = runBlocking {
   val channel = BroadcastChannel<String>(1)
   for (i in 0..20) {
       println("iteration ${i + 1} start")
       val job = scope.launch {
           channel.openSubscription()
               .receiveAsFlow()
               .collect { println("receive $it") }
       }

       scope.launch(Dispatchers.IO) {
           channel.send("$i")
       }
       delay(200)
       job.cancel()
   }
   return@runBlocking
}


Но вот println("receive $it") печатает только первые два значения, и я не могу понять, в чем причина.  Может кто-то сможет объяснить
источник