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

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

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

11 ответов

11 просмотров
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 периодически, тогда можно вообще не блокировать никакой поток. 😀

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

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

вопрос: кто как решает вопрос с динамической подгрузкой скриптов для отдельных страниц с включенным turbo router?
Sergei Toroptsev
25
Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
> комьюнити я бы не судил по этому чату. Как мы видели по статам просмотров нескольких телеговских постов, то в чате их набивается 30-40 или даже выше, когда как общаются акти...
Constantin F.
4
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Как сделать чтобы short точно был 2 байта, int точно 4 байта ?(без стандартных библиотек, ну типа без int16_t, int32_t)
#
8
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Всем привет. Испытываю проблемы в работе БД, а именно огромного роста логов, такого характера: 024-05-16 18:39:07 +05 sentry sentry [unknown] 1050169 7-1 app-sentry01.corp.ru>...
Alexey
2
Только такой if ($modx->event->name == 'OnBeforeCartItemAdding') { $meta = $params['item']['meta']; $lang = $modx->getConfig('_lang'); // проверяем, задана ли опция i...
Multi Web
1
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Карта сайта