Dr. Friedrich
ну, где тут Await AS Task
То есть я вот тебе должен помнить наизусть все названия методов в FSharp.Core?
Dr. Friedrich
Прям вот обязан?
Igor
Ну хорошо, лям на билеты! Осталось 19М на кокс и шлюх!
Остальное на рекламу на хабре и твиттере
Dr. Friedrich
Как Отче наш?
Anonymous
Прям вот обязан?
не обязан, но у меня уже использовался AwaitTask
Ayrat
Я подозреваю проблема в том что асп нет хочет таск, а асинк блок возвращает асинк
Dr. Friedrich
Кстати, а что именно? ._.
Ayrat
Возможно если совместить типы, то типы сойдутся!
Dr. Friedrich
Кто помнит, в чём разница между StartAsTask и StartImmediateAsTask?
Ayrat
Ayrat
Как таск
Nuxs🏴‍☠️
Может кто объяснить, почему персонаж в стену входит?https://github.com/Zuzuk-null/Test
Ayrat
Кто помнит, в чём разница между StartAsTask и StartImmediateAsTask?
А первый асинк блок на тредпул полностью закинет
Dr. Friedrich
Там в комментариях написано, что он стартует на текущей операционной системе %)
Dr. Friedrich
Dr. Friedrich
Вроде же мы это чинили?
Ayrat
Там в комментариях написано, что он стартует на текущей операционной системе %)
Ничоси, даже виртуалку не запустит? Ну или докер хотя бы для асинк блока? Фу, фшарп уже не тот
Dr. Friedrich
https://github.com/dotnet/fsharp/pull/7517/files да тьфу ты ёпта
Dr. Friedrich
Я починил в StartImmediate, а в StartImmediateAsTask — не починил!
Диёр
питон это стильно модно и молодёжно
Dr. Friedrich
Пошёл чинить
Dr. Friedrich
Anonymous
короче, у меня есть функция, в которой последовательно вызываются две асинхронные операции на тасках, типа такого await Task1.Run(); await Task2.Run(); как мне в F# такое записать? я то мог конечно использовать .RunSynchronously но мне хочется чтоб было все асинхронно и по-нормальному..
Anonymous
и метод должен возвращать таск еще
Dr. Friedrich
Вот это самый Ъ способ, если тебе нужно работать в терминах C#-тасок
Ayrat
task { do! Task1.Run() do! Task2.Run() }
Щас товарищ скажет что task блока нет
Ayrat
И будет винить тебя
Dr. Friedrich
Это https://github.com/rspeele/TaskBuilder.fs если что
Dr. Friedrich
И будет винить тебя
А я мейнтейнер на нугете!
Ayrat
А я мейнтейнер на нугете!
Видишь, ещё больше причин
Dr. Friedrich
Вот я рили специально для товарища залил на нугет
Dr. Friedrich
Шоб людям удобно было и хорошо
Vasiliy
Это https://github.com/rspeele/TaskBuilder.fs если что
а Саймон пилит реализацию Task? что то было такое же
Анна
Вот это тайп-астронавтика высшего порядка #fby_conf
Anonymous
осталось только это все закастить из Task<unit> в Task, кто-то знает как это делается?
Ayrat
upcast task {}
Или task { ... } :> Task
Ayrat
Иначе ногу можешь отстрелить
Dr. Friedrich
Anatoly
Romɑn
Или task { ... } :> Task
два слова перед {} выглядит эстетичнее. Но твой вариант не требует указания типа в принимающем методе
Anatoly
Монады в джунглях!
Dr. Friedrich
А пучок травы специально перед экраном выставили?
Ayrat
Вроде всё норм тут
А если там 1000 next упадет со стак оверфлоу
Anatoly
А пучок травы специально перед экраном выставили?
Это я так сел, потому что опоздал. У большинства всё норм
Ayrat
Он ожидает таск
Ayrat
Так что апкаст приятнее да
Ayrat
Это я так сел, потому что опоздал. У большинства всё норм
Решил поугарать со скалистов? Завернись в монаду
Anonymous
app.Use(fun (ctx:HttpContext) (next:Func<Task>) -> task { do! ctx.Response.WriteAsync("initial text") return! next.Invoke () } ) |> ignore "The Type 'HttpContext -> Func<Task> -> Task<unit>' is not compatible with type 'HttpContext -> Func<Task> -> Task' " app.Use(fun (ctx:HttpContext) (next:Func<Task>) -> task { do! ctx.Response.WriteAsync("initial text") do! next.Invoke () } :> Task ) |> ignore "The Type 'Task' is not compatible with type 'Func<HttpContext, Func<Task>, Task>" app.Use(fun (ctx:HttpContext) (next:Func<Task>) -> upcast task { do! ctx.Response.WriteAsync("initial text") do! next.Invoke () } ) |> ignore "Involves an indeterminate type based on information prior to this program point. Static coercions are not allowed on some types. Futher type annotations are needed"
Dr. Friedrich
https://github.com/dotnet/fsharp/pull/7517/files да тьфу ты ёпта
Да не, вроде починено должно быть. Наверное, просто версию с моим фиксом не зарелизили ещё.
Dr. Friedrich
Он чот решил, что ты функу кастуешь в таск
Dr. Friedrich
app.Use(fun (ctx:HttpContext) (next:Func<Task>) -> (task { do! ctx.Response.WriteAsync("initial text") do! next.Invoke () } :> Task) ) |> ignore Вот так попробуй.
Anonymous
наконец то можно встать с кровати спасибо
Анна
В принципе, тайп астронавтика органично смотрится в Space
Dr. Friedrich
наконец то можно встать с кровати спасибо
Ты был прикован к постели тяжким грузом тайпчекера? Или чо?
Anonymous
Ты был прикован к постели тяжким грузом тайпчекера? Или чо?
Да, думал встану как сделаю. А оно вот как затянулось
Anatoly
хде?
Площадка для конференций в Минске. Space
Dr. Friedrich
upcast task {}
Апкаст в этом месте, кстати, не работает ни рожна :(
Dr. Friedrich
Я уже привык к тому, что отчего-то в принципе очень мало мест, где он работает.
Dr. Friedrich
Конкретно тут он, видать, из-за перегруженного метода с ума сходит.
Диёр
Площадка для конференций в Минске. Space
Аааа А то я уж подумал в джетбрейновский space тайпастронавтику каким-то боком притянули
Dr. Friedrich
Ретурн! Посмотри что шарплаб делает в том, и в другом случае
Не нужен тут никакой ретурн, всё равно не работает