如何忽略 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 异步,那么简单地忽略它是行不通的,因为与 Tasks 不同,Async 操作不会执行,除非您明确启动它。

如果你只想完成它运行,但不关心等到它完成你可以做到

f() |> Async.RunAsTask |> ignore

如果你确实想等结果,你可以

f() |> Async.RunSynchronously |> ignore

您可以使用 Result 属性:

等待任务完成
let t = 
    task { 
        let! _ = SomeOperation()
        ()
    }
let _ = t.Result