以下 Instance 方法需要花费大量时间才能执行。
module CachedTags =
let private x = [1..25] |> List.collect getTags
let Instance() = x
因此,我想在初始化服务器会话时使这个调用异步。
结果我认为我可以采取以下措施:
CachedTags.Instance() |> ignore
然后这样写:
Tasks.Task.Run(fun _ -> CachedTags.Instance() |> ignore) |> ignore
如果我正确地这样做,我会毫无头绪 推荐的技术是什么?
答案 0 :(得分:2)
根据this tutorial,你可以试试这个:
module CachedTags =
// analog of task in C#
let private x = async {
[1..25] |> List.collect getTags
} |> Async.StartAsTask
当您需要结果时,可以使用different options:
// synchronously wait in current thread
x.Wait()
// use system class in current thread
x |> Async.RunSynchronously
// await result
let! result = Async.AwaitTask(x)
答案 1 :(得分:0)
module CachedTags =
let private x = lazy ([1..25] |> List.collect getTags)
let Instance() = x.Value
let tags = CachedTags.Instance()
使用lazy
是非常惯用的,只有在第一次调用Instance()
时才会实例化你的表达式(即x.Value
的第一次评估)。
https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/lazy-computations