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

Вот такой пример, нужен ли здесь suspend?

viewModelScope.launch {
interactor.listenForUpdates().collect()
}

fun listenForUpdates(): Flow<Int> {
return repository.oneChannel.asFlow()
.combine(twoChannel.asFlow()) { i,_ -> i}
.map { updateUi(it) }
}

2 ответов

18 просмотров

Если функция только связывает потоки данных, ей не надо быть suspend. И как минимум ей не надо быть suspend, если компилятор не требует.

если продолжать аналогии с тасканием ящиков то получается что для выполнения работы надо 1) создать план действий, т.е. грубо говоря, кто, откуда, куда, сколько и как часто будет носить, это и есть создание Flow. Сама по себе операция вроде не тяжёлая, делать это через suspend большого смысла вроде нет. 2) непосредственная переноска тяжестей, с некоторыми преобразованиями, типа, перепаковать c одних ящиков в другие (map) и прочее. Тут необходимо понимать, что количество работников ограниченное, и на кассе ещё и людям отвечать надо что то. Поэтому всё делается через suspend внутри корутин скоупа. Грузчик как бы несёт ящик, но если надо отвлечся - отвечает людям на кассе, время от времени перекуривает, а затем продолжает выполнять перемещение тяжестей. Это наш .collect {} который запускает процесс подготовленный в первом пункте. Т.е. если мы добавим suspend к функции что возвращает флоу мы просто сделаем неблокирующей функцию, которая создает сам флоу, сам план действий, что само по себе не должно занимать много процессорного времени. Поправьте меня, пожалуйста, если где то ошибся.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта