Size: a a a

Kotlin Community

2020 August 25

EP

Eugene P. in Kotlin Community
Alexey Otts
Можно и на бродкасте, просто у вас код программы завершается раньше чем канал оповещает о новом элементе, в примере Александра всё ок, потому что там стоит delay
Да нет ,там без close идет вечное ожидание, а элемент так и не приходит
источник

AN

Alexander Nozik in Kotlin Community
Eugene P.
А, понял, вы поменяли BroadcastChannel на Channel и все заработало. А есть где почитать как правильно использовать BroadcastChannel, или его лучше не использовать?
В приведенном случае он не нуден
источник

AN

Alexander Nozik in Kotlin Community
Eugene P.
Да нет ,там без close идет вечное ожидание, а элемент так и не приходит
Я же показал, что приходит, просто play не показывает промежуточные результаты
источник

AO

Alexey Otts in Kotlin Community
Eugene P.
Да нет ,там без close идет вечное ожидание, а элемент так и не приходит
Ну close просто закрывает foreach
источник

EP

Eugene P. in Kotlin Community
Alexey Otts
Ну close просто закрывает foreach
Если вас не затруднит, измените пример с BroadcastChannel так, чтобы он работал и остался BroadcastChannel
https://play.kotlinlang.org/?short=v8-i-ckFA
источник

AO

Alexey Otts in Kotlin Community
Eugene P.
Если вас не затруднит, измените пример с BroadcastChannel так, чтобы он работал и остался BroadcastChannel
https://play.kotlinlang.org/?short=v8-i-ckFA
Ну просто замените channel на бродкаст и все будет работать 🤷‍♂
источник

EP

Eugene P. in Kotlin Community
Alexey Otts
Ну просто замените channel на бродкаст и все будет работать 🤷‍♂
К сожалению, нет
источник

EP

Eugene P. in Kotlin Community
Не печатает ничего
val queue = BroadcastChannel<Boolean>(BUFFERED)
       launch {
           queue.consumeEach { println("receive $it") }
       }
       queue.send(true)
       queue.close()

Печатает "receive true"
val queue = Channel<Boolean>(BUFFERED)
       launch {
           queue.consumeEach { println("receive $it") }
       }
       queue.send(true)
       queue.close()
источник

AN

Alexander Nozik in Kotlin Community
Eugene P.
Не печатает ничего
val queue = BroadcastChannel<Boolean>(BUFFERED)
       launch {
           queue.consumeEach { println("receive $it") }
       }
       queue.send(true)
       queue.close()

Печатает "receive true"
val queue = Channel<Boolean>(BUFFERED)
       launch {
           queue.consumeEach { println("receive $it") }
       }
       queue.send(true)
       queue.close()
только вот так: https://pl.kotl.in/o80pkbKSF Тут должна быть дополнительная задержка, поскольку Broadcast channel не сохраняет события, произошедшие до подписки
источник

EP

Eugene P. in Kotlin Community
Alexander Nozik
только вот так: https://pl.kotl.in/o80pkbKSF Тут должна быть дополнительная задержка, поскольку Broadcast channel не сохраняет события, произошедшие до подписки
Точно, спасибо. Добавил задержку перед отправкой данных и все заработало
источник

AN

Alexander Nozik in Kotlin Community
Eugene P.
Точно, спасибо. Добавил задержку перед отправкой данных и все заработало
Если у вас ровно одна подписка, то Broadcast лучше не использовать. А если он все-таки нужен, то лучше подумать над Flow
источник

EP

Eugene P. in Kotlin Community
Alexander Nozik
Если у вас ровно одна подписка, то Broadcast лучше не использовать. А если он все-таки нужен, то лучше подумать над Flow
Спасибо, я экспериментирую и с одним и с другим
источник

с#

саша сок #KotlinGang... in Kotlin Community
добрый день, извиняюсь за столь замечательное качество скриншота, но вот у меня есть complexity issue, оно в принципе особо ничего не значит, но есть какие-то идеи, чтобы по-другому такой код сделать ?
источник

AN

Alexander Nozik in Kotlin Community
саша сок #KotlinGang
добрый день, извиняюсь за столь замечательное качество скриншота, но вот у меня есть complexity issue, оно в принципе особо ничего не значит, но есть какие-то идеи, чтобы по-другому такой код сделать ?
Нормальный код. Вообще проблем не вижу
источник

с#

саша сок #KotlinGang... in Kotlin Community
Alexander Nozik
Нормальный код. Вообще проблем не вижу
хорошо значит забью)
это просто очень сильная придирка и даже в итоговом code quality оно не отображается, но просто вдруг советы есть какие
источник

AN

Alexander Nozik in Kotlin Community
саша сок #KotlinGang
хорошо значит забью)
это просто очень сильная придирка и даже в итоговом code quality оно не отображается, но просто вдруг советы есть какие
Ну тут кроме длинных названий какие придирки. А сокращать имена - так себе идея
источник

AO

Alexey Otts in Kotlin Community
Alexander Nozik
только вот так: https://pl.kotl.in/o80pkbKSF Тут должна быть дополнительная задержка, поскольку Broadcast channel не сохраняет события, произошедшие до подписки
Там же есть буфер
источник

с#

саша сок #KotlinGang... in Kotlin Community
Alexander Nozik
Ну тут кроме длинных названий какие придирки. А сокращать имена - так себе идея
а там не в этом дело, там очень много ответвлений when по его мнению
источник

AN

Alexander Nozik in Kotlin Community
Alexey Otts
Там же есть буфер
Ну насколько я помню, он не активируется до первого подписчика. В общем, его скоро выпилят
источник

AN

Alexander Nozik in Kotlin Community
саша сок #KotlinGang
а там не в этом дело, там очень много ответвлений when по его мнению
Так перебор по типам - это нормальная практика, идиома даже. Особенно если sealed class
источник