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

Https://Gist.Github.Com/Nevdokimof/Bc08536d4a4c7e1834373fd628340eae Подскажите, это правильный способ распараллелить несколько вызовов и объединить их

результат? таких вызовов в одной транзакции штук 5, порядок не важен

может, можно сделать лучше?

32 ответов

12 просмотров

Зачем скоуп на каждый вызов создавать? Зачем их вообще создавать

Andrey- Автор вопроса
Alexander Nozik
Зачем скоуп на каждый вызов создавать? Зачем их во...

так async {} это экстеншн для скоупа, а получить текущий скоуп в suspend блоке похоже что нельзя, ну или я не нашел как

Andrey
так async {} это экстеншн для скоупа, а получить т...

suspend fun foo() { val scope = CoroutineScope(coroutineContext) } @noraltavir это будет работать?)

Andrey
так async {} это экстеншн для скоупа, а получить т...

Ну как минимум можно сделать это один раз

Aλex Sokol
suspend fun foo() { val scope = CoroutineScope...

Будет, но это сломает немножко structured concurrency

Alexander Nozik
Зачем скоуп на каждый вызов создавать? Зачем их во...

для scope и context пригодился бы супер развёрнутый туториал, разные примеры и разжёваная дока по advanced применению

Andrey
так async {} это экстеншн для скоупа, а получить т...

В принципе пошло бы что-то вроде suspend fun requestResult(): SomeResult = coroutineScope{ ... } flow{ while(true){ requestRestult() } } Разумеется, если там цикл. Если там однократный запрос, то Flow там вообще не надо и нельзя использовать.

Andrey
понял, спасибо

У вас в коде однократный запрос. Он действительно однократный?

Andrey- Автор вопроса
Alexander Nozik
У вас в коде однократный запрос. Он действительно ...

да, а почему flow нельзя использовать в таком случае? только после этого вопроса понял что можно обойтись suspend функцией)

Andrey
да, а почему flow нельзя использовать в таком случ...

Потому что он не для этого сделан вообще. Это соврешенно непростительный RX головного мозга. Если запрос однократный то просто так: fun CoroutineScope.requestResult() : Deferred<SomeResult> = async{ ... } И все. Если не надо создавать скоуп/возможность отмены, то просто суспенд функция

Andrey- Автор вопроса
Alexander Nozik
Потому что он не для этого сделан вообще. Это совр...

спасибо еще раз, у меня прям мир перевернулся

Alexander Nozik
Потому что он не для этого сделан вообще. Это совр...

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

Andrey
спасибо еще раз, у меня прям мир перевернулся

Я рад. Вообще типичная проблема у людей с RX. В RX есть только один асинхронный примитив - поток. В корутинах их существенно больше. И не надо использовать тяжеловесные и неудобные вещи там, где можно сделать все существенно красивее.

Alexander Nozik
Отмены нет

угу, но "либа" в большинстве случаев не должна знать о том, что может понадобиться отмена, когда нужна отмена - оборачиваем суспендную функцию в асинк, в других случаях экспоузим суспенд функцию наружу

Alexander Nozik
Я рад. Вообще типичная проблема у людей с RX. В RX...

Справедливости ради, там есть и Single, и Maybe, просто из-за природы рыкса они выглядят так же. И вот этим двоим товарищам suspend суть прямая замена.

Andrew Mikhaylov
Справедливости ради, там есть и Single, и Maybe, п...

Я знаю, но Single - это как раз костыль для спасения от того факта, что там нет ничего, кроме потоков.

Alexander Nozik
Я знаю, но Single - это как раз костыль для спасен...

А Future/CompletableFuture - это костыль для спасения от того, что в языке нет корутин?

(
А Future/CompletableFuture - это костыль для спасе...

CompletableFuture вполне прилично решает проблему асинхронных примитивов. Другое дело, что композировать их неудобно, без фичи на уровне языка.

Alexander Nozik
CompletableFuture вполне прилично решает проблему ...

Композировать неудобно, да, хороший контракт не придумали. С другой стороны, композировать синглы удобно, и они семантически являются тем же самым, что и Future и Deferred

(
Композировать неудобно, да, хороший контракт не пр...

А чем композиция синглов лучше, чем композиция CF? Те же самые then.

Alexander Nozik
А чем композиция синглов лучше, чем композиция CF?...

У меня лично апишка фьюч головокружение вызывает. Если кому-то удобно, ладно, спорить не буду. Прошу обратить внимание на вторую часть моего сообщения про семантику

(
У меня лично апишка фьюч головокружение вызывает. ...

А чего там семантического? По сути один оператор с несколькими вариациями. Вопрос же был исходно не в том, как ты композируешь эту штуку, а как ты ее исходно получаешь. Для того, чтобы получить единичный элемент потока, тебе надо построить этот поток, потом отфильтровать первый элемент (при этом отследив, что и построение и вычитывание проходят в правильных окружениях).

Алексей Гладков
А zip там есть? Это чуть ли не самое удобное в RX

Я тебя прям не узнал в гриме https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html#thenCombine-java.util.concurrent.CompletionStage-java.util.function.BiFunction-

(
Чего? Single.create { yourCodeThatWillYieldVal...

Ну хорошо, убедил, не так сложно (правда тут нет окружения).

Alexander Nozik
Я тебя прям не узнал в гриме https://docs.oracle.c...

Богатым буду )) надо как-то будет посмотреть что там в CF, хотя с корутинами не нужно ни то, ни другое

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

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

читать файл максимально быстро? странный вопрос))
zamtmn
53
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Приветствуем всех! Устали без проектов? Если вы программист и хотите получать стабильные заказы, компания Elif предлагает вам недельный курс по поиску проектов и их ведению. ...
Elif
1
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
19
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
Всем привет, после Си стоит учить плюсы или лучше на раст перейти?
Linus
8
или вы считаете муит дает знание?
супер_лох_3000 альфа версия
12
значить например он учился в СДУ то получается он особенный?)
Asets Serikov
11
Карта сайта