Size: a a a

Kotlin Community

2020 February 03

V

Vladimir in Kotlin Community
Kopusha
вот именно, как!? 😄
Так а зачем все таки флоу, если можно просто из корутины все пихнуть в канал?) Ну и если так хочется - channel.asFlow )
источник

K

Kopusha in Kotlin Community
сейчас наверное уже да, но по началу как канал не выглядело)) Просто, если бы возвращал по-порядку то делал бы await в цикле и хватило бы флоу, а если по мере поступления, то канал? Как-то странно, не?
источник

SB

Sergey Barmin in Kotlin Community
Не оч понимаю, а вариант с List<Deferred> возвращенный от async с последующим List<Deferred>.awaitAll() это неправильный подход?
источник

K

Kopusha in Kotlin Community
awaitAll же все скопом
источник

SB

Sergey Barmin in Kotlin Community
А, надо по мере поступления, да, в глаза долблюсь. А вообще это нормально, или это тоже надо на флоу/каналах делать? Если просто куча параллельных запросов хочется
источник

AO

Alexey Otts in Kotlin Community
А почему это вообще всё не обработать как отдельные запросы?
источник

AO

Alexey Otts in Kotlin Community
Если порядок не важен и не нужно чтобы все вместе
источник

SB

Sergey Barmin in Kotlin Community
Alexey Otts
Если порядок не важен и не нужно чтобы все вместе
Если мне, то важна параллельность, что не друг за дружкой
источник

AO

Alexey Otts in Kotlin Community
Sergey Barmin
Не оч понимаю, а вариант с List<Deferred> возвращенный от async с последующим List<Deferred>.awaitAll() это неправильный подход?
Тогда это ок
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexey Otts
Народ, а какие вообще гарантии на suspend'ах и try finally?
try {
 foo() //suspension
} finally {
 bar()
}


Есть ли кейсы, когда bar не вызовется?
Должен вызываться всегда, если никто не начудит с низкоуровневыми примитивами и не потеряет Continuation.
Ещё есть такой ньюанс, что в bar() корутина может быть уже отменена и может понадобиться withContext(NonCancellable)
источник

AO

Alexey Otts in Kotlin Community
Vladimir Petrakovich
Должен вызываться всегда, если никто не начудит с низкоуровневыми примитивами и не потеряет Continuation.
Ещё есть такой ньюанс, что в bar() корутина может быть уже отменена и может понадобиться withContext(NonCancellable)
хммммм, а вот этот второй моментик, есть где почитать?
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexey Otts
хммммм, а вот этот второй моментик, есть где почитать?
источник

AO

Alexey Otts in Kotlin Community
А это про bar, что то я тупанул
источник

AN

Alexander Nozik in Kotlin Community
Kopusha
Ну, вопрос философский) Когда начинал, со стороны очень казалось, что вытягиваю. Например, обычный GET для одной картинки - вытягивание? А тут вытягивание списка картинок. Инициатор - пользователь, со стороны все выглядит холодным, это ж не сенсор какой-то.
Так ChannelFlow же. Со сотроны, где пихаете - канал, с другой стороны Flow.
источник

AN

Alexander Nozik in Kotlin Community
Alexey Otts
@noraltavir @fogone
Может вы в курсах
Насколько я понимаю, те же самые, которые на обычный try. Там только проблема в том, что корутины без обвязки сами исключения не прокидывают за скоуп. Надо библиотекчными пользоваться
источник

AN

Alexander Nozik in Kotlin Community
Sergey Barmin
Не оч понимаю, а вариант с List<Deferred> возвращенный от async с последующим List<Deferred>.awaitAll() это неправильный подход?
Это про параллельное выполнение, а не про выпихнуть по мере завершения
источник

AO

Alexey Otts in Kotlin Community
Alexander Nozik
Насколько я понимаю, те же самые, которые на обычный try. Там только проблема в том, что корутины без обвязки сами исключения не прокидывают за скоуп. Надо библиотекчными пользоваться
Ну меня волнуют только гарантии исполнения finally
источник

AN

Alexander Nozik in Kotlin Community
Alexey Otts
Ну меня волнуют только гарантии исполнения finally
Вот это, я думаю, гарантированно.
источник

BP

Bogdan Panchenko in Kotlin Community
Kopusha
да вернуть флоу, например, который будет отдавать их по мере поступления.(или, если без флоу, то хоть массив результатов, отсортированый по очередности результатов, но без хаков типа таймстемпа или айдишников).
Все зависит от применения. Если тип одинаковый то асинки заганяем  в лист и ждём
источник

AF

Alex F. in Kotlin Community
Всем привет.
Я использую callbackFlow и опертор buffer(Channel.Factory.UNLIMITED)
Как можно пологгировать заполненость канала?
Хочу убедиться, что данные в нем не вызовут OOM.
источник