169 похожих чатов

Всем привет, может кто подсказать следующий момент по корутинам? Если я

мерджу два флоу и после этого дополнительно у второго флоу делаю tryEmit, мне надо чтобы мердж выше опять сработал, как такое сделать? Вот пример:

val flowA = MutableStateFlow(1)
val flowB = MutableStateFlow(2)

merge(flowA, flowB).collect { println(it) } // Напечатает 1, 2

flowB.tryEmit(3) // merge выше должен напечатать 3

со StateFlow такой трюк не работает, он напечатает 1, 2 и все, 3 не напечатает

8 ответов

31 просмотр

у вас collect - терминирующая операция. После него ничего не может быть. Точнее он засуспендится навечно, пока кто-то не закроет flow

ilya the 大佬 🇹🇼- Автор вопроса
Alexander Nozik
у вас collect - терминирующая операция. После него...

а что вместо collect здесь использовать надо?

ilya the 大佬 🇹🇼
а что вместо collect здесь использовать надо?

Можно сделать onEach{..}.launchIn(...) или завернуть collect в launch, чтобы он выполнялся в другой корутине

ilya the 大佬 🇹🇼- Автор вопроса
Alexander Nozik
Можно сделать onEach{..}.launchIn(...) или заверну...

о, работает так действительно, спасибо. А может еще подскажете, почему в rx observable - flow конвертации сделали ChannelFlow возвращаемым значением, это потому что для маппинга с rx в корутины надо использовать сабжекты чтобы мапить в stateflow/sharedflow, и observable, соответсвенно, мапится в каналы (channelFlow)?

ilya the 大佬 🇹🇼
о, работает так действительно, спасибо. А может ещ...

Тут не подскажу. Но вообще ChannelFlow - это очевидный способ сделать "горчий" поток

ilya the 大佬 🇹🇼- Автор вопроса
ilya the 大佬 🇹🇼
так stateflow/sharedflow тоже горячие же

Ну там внутри тоже каналы. Вообще stateFlow появился сильно позже. Возможно интеграция с rx была уже в этот момент

ilya the 大佬 🇹🇼
так stateflow/sharedflow тоже горячие же

Елизаров писал что sharedflow это эволюция channelflow и лучше использовать sharedflow... я сталкивался с какими-то неочевидными блокировками когда использовал channelflow и после перехода на sharedflow всё стало работать

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта