如何忽略 F# 中的任务?
How to ignore a Task in F#?
如果我们有一个 f
的函数 return 和 Async<something>
,我们可以用 do! f() |> Async.Ignore
忽略 return 值。是否有类似的结构来忽略任务?现在,我必须做这样的事情:
task {
let! result = SomeOperation()
result |> ignore
}
技术上我可以做到 |> Async.AwaitTask |> Async.Ignore
,但我不确定将任务转换为异步只是为了忽略它是多么浪费...
如果重要的话,我正在使用 Ply 的 task{}
计算表达式。
如果您不关心 return 值,则不必等待任务完成,您可以忽略整个任务:
SomeOperation() |> ignore
如果您的函数 returns 异步,那么简单地忽略它是行不通的,因为与 Task
s 不同,Async
操作不会执行,除非您明确启动它。
如果你只想完成它运行,但不关心等到它完成你可以做到
f() |> Async.RunAsTask |> ignore
如果你确实想等结果,你可以
f() |> Async.RunSynchronously |> ignore
您可以使用 Result
属性:
等待任务完成
let t =
task {
let! _ = SomeOperation()
()
}
let _ = t.Result
如果我们有一个 f
的函数 return 和 Async<something>
,我们可以用 do! f() |> Async.Ignore
忽略 return 值。是否有类似的结构来忽略任务?现在,我必须做这样的事情:
task {
let! result = SomeOperation()
result |> ignore
}
技术上我可以做到 |> Async.AwaitTask |> Async.Ignore
,但我不确定将任务转换为异步只是为了忽略它是多么浪费...
如果重要的话,我正在使用 Ply 的 task{}
计算表达式。
如果您不关心 return 值,则不必等待任务完成,您可以忽略整个任务:
SomeOperation() |> ignore
如果您的函数 returns 异步,那么简单地忽略它是行不通的,因为与 Task
s 不同,Async
操作不会执行,除非您明确启动它。
如果你只想完成它运行,但不关心等到它完成你可以做到
f() |> Async.RunAsTask |> ignore
如果你确实想等结果,你可以
f() |> Async.RunSynchronously |> ignore
您可以使用 Result
属性:
let t =
task {
let! _ = SomeOperation()
()
}
let _ = t.Result