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

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

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

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

32 ответов

50 просмотров

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

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, хотя с корутинами не нужно ни то, ни другое

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта