如果我们有一个函数
f
返回Async<something>
,我们可以用do! f() |> Async.Ignore
忽略返回值。是否有类似的构造来忽略任务的返回值?现在,我必须做这样的事情:
task {
let! result = SomeOperation()
result |> ignore
}
从技术上讲,我可以做到
|> Async.AwaitTask |> Async.Ignore
,但我不确定将任务转换为异步只是为了忽略它的返回值是多么浪费......
如果重要的话,我正在使用 Ply 的
task{}
计算表达式。
如果您的函数返回异步,那么简单地忽略它是行不通的,因为与
Task
不同,Async
操作不会执行,除非您明确启动它。
如果您只想让它运行,但不关心等待它完成,您可以这样做
f() |> Async.RunAsTask |> ignore
如果你确实想等待结果,你可以这样做
f() |> Async.RunSynchronously |> ignore
我的解决方案是定义类似于 Async.Ignore 的 Task.Ignore 函数:
type Task
with static member Ignore(f) = task { let! _ = f in return () }
这样你的代码看起来像:
task {
do! SomeOperation() |> Task.Ignore
}
如果你不关心返回值,那么你不必等待任务完成,你可以忽略整个任务:
SomeOperation() |> ignore