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

Не заглядывая на неск шагов вперед хочу спросить в

интерфейс ретрофита нужно ли делать запросы как suspend функции? в этом же смысла нет? suspend делаешь функции репозитория которые юзают апи

11 ответов

27 просмотров
Turalllb-Turalll Автор вопроса

ну еще не помечать. потом в репозитории функция помеченная саспенд будет дергать простую функцию в апи

если не делать suspend в retrofit, то в репозитории нужно будет вызов заворачивать в withContext(Dispatchers.io) (ну или какой вы там используете диспатчер для запросов)

Turalllb-Turalll Автор вопроса
Alexey Illarionov
если не делать suspend в retrofit, то в репозитори...

не придется, функция репозитория сама по себе suspend, зачем мне поток в ней переключать

Turalllb Turalll
не придется, функция репозитория сама по себе susp...

чтобы не заблокировать вызывающий её поток. Вызвать блокируемый метод ретрофита из suspend функции в данном случае - это примерно как Thread.sleep в неё добавить

Turalllb-Turalll Автор вопроса
Alexey Illarionov
чтобы не заблокировать вызывающий её поток. Вызват...

почему вы думаете что в suspend repoFunGetData() { api.getData() } я имею право только другие suspend функции вызывать? это заблуждение. Все будет ок, вызывающая фукцию репозитория сопрограмма уже на io

Turalllb Turalll
почему вы думаете что в suspend repoFunGetData() {...

можно другие функции вызывать, но они будут блокировать поток на время своего выполнения. А почему функция репозитория вызывается уже на io? А что, если нет?

Turalllb-Turalll Автор вопроса
Alexey Illarionov
можно другие функции вызывать, но они будут блокир...

имею ввиду что хоть функцию пометил suspned в апи хоть нет, от этого не зависит вызывают функцию репозитория на io или на main. За это всегда отвечает , например скоуп во вьюмодели, чтобы дальше лишних переключений не делать. Ну не поток же блокировать, а сопрограмму. Но я понял, что самая последняя функция касается ожидания ответа из сети и ее делать не suspned опасно, только если реактивное апи использовать

Turalllb Turalll
имею ввиду что хоть функцию пометил suspned в апи ...

в корутинах есть достаточно четкое соглашение: suspend-функция не должна блокировать вызывающий её поток (main-safe). Механизм корутин более-менее сам умеет фазить переключения диспатчеров

Turalllb-Turalll Автор вопроса
Alexey Illarionov
в корутинах есть достаточно четкое соглашение: sus...

да просто может быть вызвана саспенд функция, а в ней какой-то матем. расчет, используешь какие-то Math api и как тут не заблокировать. В моем конкретном примере я не подумал, что функция в интерфейсе апи будет блокироваться, с дуру решил, что раз в репозитории саспенд, то поток будет переключаться даже после того как добрался до не саспенд

Alexey Illarionov
можно другие функции вызывать, но они будут блокир...

Я перевожу поток ещё в домене, ибо там уже начинается выполнения тяжёлой бизнес логики, по возврату в презентацию в том же домене я возвращаю результат в главный поток

Turalllb Turalll
да просто может быть вызвана саспенд функция, а в ...

Для выполнения тяжёлых расчётов можно перейти на Default диспатчер внутри самой функции, там где это надо. Или просто вызвать yield периодически, тогда можно вообще не блокировать никакой поток. 😀

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
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
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта