
Friedrich
03.09.2018
03:33:12
Бонусные баллы, если сделаешь это без использования лишнего внешнего блока task (внутри у тебя и так уже таск есть)

Grigoriy
03.09.2018
03:33:13

Friedrich
03.09.2018
03:34:01
Ну, это просто мои мысли. Дальше уже дело автора — что менять, а что нет по результатам моего ревью

Google

Friedrich
03.09.2018
03:34:35
Вроде всё прочитал. Мне апишечка тамошняя не нравится. Мне кажется, она будет вот так убого выглядеть что из F#, что из C#.
Если хочется сделать красивый код — я бы заврапал её в чуть большее количество функций, которые бы можно было по-отдельности протестировать, например.

Grigoriy
03.09.2018
03:35:07
Polly?

Friedrich
03.09.2018
03:35:28
SftpClient срамной

Grigoriy
03.09.2018
03:35:40
О, да

Friedrich
03.09.2018
03:35:45
Async.FromBeginEnd это ни в какие ворота, да :)
Polly в данном случае мне тоже не нравится, но её уже только из F# неудобно использовать. Мб вот она — хороший кандидат на то, чтоб заврапать

Grigoriy
03.09.2018
03:37:19
В компутейшонал экспрешн?

Friedrich
03.09.2018
03:59:27
Ну, впрочем, это уже повод задуматься про асинк — может быть, он тут пригодится, ок :)
У тасков больно уж убогонький API для получения результата синхронно.

Google

Friedrich
03.09.2018
04:01:10
Но тогда можно, например, так:
tasks
|> Seq.map Async.AwaitTask
|> Async.Parallel
|> Async.RunSynchronously
Предпочесть этот или тот подход — вопрос, скорее, философский.
Можно прикинуть, где аллокаций больше будет, и вот это всё, но по сути однофигственно, используй какой больше нравится.

Grigoriy
03.09.2018
04:10:21

Evgeniy
03.09.2018
04:25:47
@PimenovDenis А что у тебя за задача? Может ее как-то иначе можно решить?

Vladimir
03.09.2018
05:12:09

Friedrich
03.09.2018
05:12:51

Vladimir
03.09.2018
05:15:09
Согласен) Я скорее про паттерн) что в общем так делать не нужно, только в спец случаях

Friedrich
03.09.2018
05:16:03
Да, соглашусь.

Grigoriy
03.09.2018
05:45:54

Friedrich
03.09.2018
05:50:16

Grigoriy
03.09.2018
05:53:03
Да можно ж оба варианта запустить в fsi и посмотреть :)

Friedrich
03.09.2018
05:54:30
Что посмотреть? FSI где-то собирает статистику по аллокациям?

Grigoriy
03.09.2018
05:55:37
Кстати - там же не эксепшон возвращается, а Error of string
fsi вроде при #time "on" пишет не только время выполнения, но и статистику GC

Friedrich
03.09.2018
05:59:59
Надо же, я этого не знал / забыл.

Grigoriy
03.09.2018
06:05:37
Но спасибо за идею - буду экспериментировать!

Aleksander
03.09.2018
06:23:11
По поводу эксепшена - в некоторых случаях и правильно что после эксепшена всё падает. Мы 3 раза честно попытались с полли, если там коннекта нет, то смысл пробовать для каждого файла (а если их там 10 000)?
Другое дело, что могут быть ошибки специфичные для конкретного файла - например если файл уже существует на SFTP - имхо как раз такие случаи лучше перехватывать и выносить в Result.
Про connect / disconnect на каждый аплоад - так конечно проще и надежнее, но у меня был случай когда коннект сам по себе занимал 5-10 секунд, а заливка файла укладываласть в 100мс.

Google

Grigoriy
03.09.2018
06:25:39
Это в примере загрузка всех файлов на локалхост. В реальной жизни все фтп разные. Не смогли загрузить один - не значит, что все остальные не получится (я из за этого-то и начал этот огород городить)
К коннекту это тоже относится.

Bonart
03.09.2018
06:26:16

アレクセイ
03.09.2018
06:27:13

Grigoriy
03.09.2018
06:31:24
Много чего можно навернуть :)

Bonart
03.09.2018
06:37:25

Grigoriy
03.09.2018
06:40:05

Bonart
03.09.2018
06:49:15

Friedrich
03.09.2018
06:50:27
На любую никто не предлагает

Grigoriy
03.09.2018
06:51:32
https://blogs.msdn.microsoft.com/oldnewthing/20051107-20/?p=33433
Прочитал Чена. Познавательно. Напоминает хрестоматийный пример (не про ритрай) про программу спутника, один модуль которой ожидал, что все величины в СИ, а другой - в имперской.
У меня вывод из статьи немного иной - не ретраи опасны, а мискоммуникация

Vladimir
03.09.2018
07:30:30
и 30-секундные таймауты)

Roman
03.09.2018
07:36:12

Vladimir
03.09.2018
07:37:47

Evgeniy
03.09.2018
07:43:57
https://eiriktsarpalis.wordpress.com/2017/02/19/youre-better-off-using-exceptions/

Roman
03.09.2018
07:44:24
https://twitter.com/zaid_ajaj/status/1036369062408998912?s=09

Google

Evgeniy
03.09.2018
07:45:25

Roman
03.09.2018
07:47:20

Evgeniy
03.09.2018
07:48:38
Мне кажется, в этом смысла уже меньше.

Roman
03.09.2018
07:49:45
Для большого приложения есть смысл.
Неучтеные состояния явно тегаются и впоследствии их можно учесть.

Vladimir
03.09.2018
07:50:03
ну я думаю что смысл тут отделить методы которые могут бросать эксепшны от тех которые не могут
но что-то кажется, что любые методы могут их бросать)

Friedrich
03.09.2018
07:51:50
ThreadAbortException может кто угодно бросить.
Любой GC safepoint, если я правильно помню.

Vladimir
03.09.2018
07:53:25
да и баг где угодно может быть)

Vasily
03.09.2018
07:53:44

Roman
03.09.2018
07:58:10

Vasily
03.09.2018
08:00:27
Я к тому, что в выбранной архитектуре довольно тяжело прокинуть имя темплейта для отображения, например
А для wpf это критично

Evgeniy
03.09.2018
08:07:22

Roman
03.09.2018
08:19:50
Привет! Знаком с F#?

Roman
03.09.2018
08:23:07

Evgeniy
03.09.2018
08:23:49

Roman
03.09.2018
08:26:02

Evgeniy
03.09.2018
08:27:41

Friedrich
03.09.2018
08:30:19

Google

Roman
03.09.2018
08:31:15
Объясни.
Всмысле все что с тегом Bug в логах отправляется на внимательное изучение. И исправляется.

Evgeniy
03.09.2018
08:32:38

Bonart
03.09.2018
08:33:18

Roman
03.09.2018
08:33:44
ок согласен

Nikolay
03.09.2018
08:34:45
В другом чате спамит
Доставай банхаммер

Roman
03.09.2018
08:35:07

Nikolay
03.09.2018
08:36:13
done
Насколько давно? :D
А то я всё фридриха зову

Roman
03.09.2018
08:36:24

Roman
03.09.2018
08:36:26

Nikolay
03.09.2018
08:36:34
Аа, ладно

Roman
03.09.2018
08:36:39
:D

Vasily
03.09.2018
08:55:32
Я там выше озвучил , почему

Vladimir
03.09.2018
09:20:58

Vasily
03.09.2018
09:21:33