【发布时间】:2020-06-17 07:43:47
【问题描述】:
我对 F# 有点陌生,我正在尝试在 F# 模块中使用一些 C# 类。
let getApps (context: MyContext) =
context.Provider.GetService<AppRepository>().GetActiveAsync().Result
|> List.ofSeq
|> List.map printName
|> ignore
我的 C# 开发人员尖叫:.Result 很糟糕 ????。所以我的问题是,如何将这段代码重构为更优雅的方式,并利用 F# 中适当的异步编程。
我一直在尝试使用不同的变体:
|> Async.AwaitTask
|> Async.RunSynchronously
但它看起来很丑而且不短,并不是说我不确定它是否有效地利用了处理器时间。
【问题讨论】:
-
这不就是
let! getApps (context: MyContext) = context.Provider.GetService<AppRepository>()吗? (与with open FSharp.Control.Tasks) - 相关:docs.microsoft.com/en-us/dotnet/fsharp/tutorials/… -
@Andrei context.Provider.GetService
() 是什么类型? GetActiveAsync 是什么类型的? -
@KoenigLear GetActiveAsync 的类型为
Task<List<App>>。GetService<AppRepository>()的类型为AppRepository。这些都是 C# 类