Size: a a a

2021 July 09

IC

Ilya L Che in F# Chat
Ещё можно скобками.
https://t.me/fsharp_chat/196845
источник

IC

Ilya L Che in F# Chat
источник

И

Иван in F# Chat
Спасибо
источник

AH

Ayrat Hudaygulov in F# Chat
скоуп юза задаётся отступом.

Пару способ сделать следующий уровень идентации на ровном месте скинули выше.
источник

AH

Ayrat Hudaygulov in F# Chat
Вот это красивый вариант
источник
2021 July 10

И

Иван in F# Chat
источник

AH

Ayrat Hudaygulov in F# Chat
источник

И

Иван in F# Chat
Так а где тут скоуп для use?
источник

AH

Ayrat Hudaygulov in F# Chat
GetResponseAsync возвращает Task<T>
а ты работал в контексте Async
источник

AH

Ayrat Hudaygulov in F# Chat
ну я его убрал. он тут вроде не нужен
источник

AH

Ayrat Hudaygulov in F# Chat
нужен?
источник

И

Иван in F# Chat
Да
источник

AH

Ayrat Hudaygulov in F# Chat
интересно!
источник

AH

Ayrat Hudaygulov in F# Chat
а зачем нужен? в познавательных целях?
источник

И

Иван in F# Chat
Ну например я что-то достаю с базы, закрываю коннект, обрабатываю, потом опять открываю и т.д.
источник

AH

Ayrat Hudaygulov in F# Chat
ну, это не то чтобы очень оптимально, но допустим. в СЕ вложенные скоупы тоже должны быть СЕ.

СЕ это компиляторная магия которая реврайтит твой код по правилам контекста
источник

AH

Ayrat Hudaygulov in F# Chat
источник

AH

Ayrat Hudaygulov in F# Chat
но это просто очень странный код!
источник

И

Иван in F# Chat
Ну работает и ладно, хоть и довольно многословно. В познавательных целях тоже
Проще наверно выносить в отдельные функции, я думал как бы без этого обойтись
источник

AH

Ayrat Hudaygulov in F# Chat
let someAsyncFunction =

   let getResp (req: WebRequest) = async {
       use! resp = req.GetResponseAsync() |> Async.AwaitTask
       printfn "closed resp"
   }

   async {
       let req = WebRequest.Create(Uri("https://google.com/"))
       do! getResp req
       printfn "done"
   }

[<EntryPoint>]
let main argv =
   someAsyncFunction
   |> Async.RunSynchronously
   0
источник