Ayrat
Стопе
Ayrat
Сейчас у тебя получился Seq<Async<_>>
Ayrat
как ты его дальше поглощаешь?
Vasily
Ну считай, что у меня там AyncSEq.unfoldAsync
Ayrat
ок, считаю
Ayrat
Он начинает разворачивать по требованию и выполнять по одному
Vasily
Условно, хочу seq, который в процессе догенерирует что надо
Ayrat
ну изи на самом деле
Ayrat
ща напишу
Vasily
Точнее asyncSeq
Ayrat
а ты можешь рабочий код скинуть?
хотя бы псевдо
Ayrat
хотя похуй
Ayrat
я тебе так напишу, а ты уж там к своему приведёшь
Vasily
Там небось будет asyncSeq{
Ayrat
Там небось будет asyncSeq{
let reader: IEnumerator<unit> = failwith "mock"
let failed = ResizeArray()
reader
|> AsyncSeq.unfoldAsync(fun reader -> async {
if reader.MoveNext() then
return Some(reader.Current, reader)
else
failed.Add()
return None
})
|> AsyncSeq.append (failed |> AsyncSeq.ofSeq)
Ayrat
ну, идею ты понял
Ayrat
хотя не, я тут не прав. он на первом фейле закончит стрим
Vasily
Угу, угу
Ayrat
но эт не принципиально
Vasily
Там стейт должен быть более сложный
Ayrat
Дада
Vasily
Но идея понятна, да
Ayrat
тут главное должен быть кондишн окончания чтения всех элементов ридера и кондишн - удачно неудачно, чтобы понять что надо пихнуть в failed
Ayrat
который потом приапендится с конца
Vasily
А прямо в стейте его нельзя аппендить?
Ayrat
можно попробовать через asyncSeq{} билдер
Ayrat
там можно yield!
Ayrat
в конце сделать
Vasily
Ну вот и думаю
Romɑn
Romɑn
Ayrat
Romɑn
ЭТО ВЫЗОВ???
не просто я вижу это вижу толкьо смутабельнйо переменной мб можно без нее
Romɑn
Ayrat
мутабельный лист норм, но ресайз ерей будет быстрее
Romɑn
Romɑn
хотя да и там и там памяти будет жрать что ресайз что лист и сек
Romɑn
так что ленивость тут не нужна
Ayrat
Ну вот и думаю
let reader: IEnumerator<bool * unit> = failwith "mock"
let failed = ResizeArray()
asyncSeq {
while reader.MoveNext() do
let (status, data) = reader.Current
if status then
yield data
else
failed.Add()
yield! AsyncSeq.ofSeq failed
}
Ayrat
подразумевается что твой ридер идёт до конца на похуй, но в каждом ответе есть статус ответа - фейл или нет
Ayrat
такой синтаксис с возвратом из while можно только в билдерах юзать
Ayrat
и ещё if возвращает разные типы
Ayrat
но это валидный кот
Ayrat
дикая императивщина
Vladislav
а
Ayrat
Vladislav
я умер под грузом конкурентности
Romɑn
Hog
vc надо брать
Из этой серии ещё одна фиговина была :) меганастраиваемая. Но - склероз :)
Romɑn
Vasily
Hog
Фар
Василий! Ну не настолько я склерозник :)
Hog
DOS Navigator! Вот!
Vasiliy
Larian анонсировала Baldur's Gate III.
Игру представили на стриме Google.
https://dtf.ru/games/53325
Vasily
Ебать
Vasily
Теперь по теме бесконечно asyncseq
Hog
Hog
yield!
Vasily
Понял я, что так, как хочется, получится только с рекурсией
Vasily
Я хочу попробовать операцию и сделать ей рескедул, если она провалилась
Hog
Ещё мона unfold
Vasily
Читаю набор байт из стрима, отправляю на сервер, если зафейлилось, надо повторить, но потом
Hog
Внутри делаешь ещё один асинк сек провалившихся операций и илдишь в своё всё, что там появилось?
Vasily
Hog
Это я тереотезирую :)
Vasily
Только в данном случае тогда асинксек хз что должен возвращать
Vasily
Получается, что список юнитов
Hog
Резалтов?
Vasily
Потому как вычисление производится на этапе формирования елда
Vasily
Т.е. сам факт итерации важен
Hog
Я подумаю на досуге :)
Hog
Интересно
Vasily
С другой стороны
Hog
Я это решал навешиванием Полли. Но @omgszer говорил, что она не нужна
Vasily
Ретрай на рекурсии пишется влет
Hog
Да но :) с полли ты просто свой асинк из сека оборачиваешь - и больше ничего делать не надо