假设我有一个异步数据源:
let getData() = async { return [ 3.14; 2.72 ] }
我可以使用 let!
来调用它和一个临时标签:
let showData1() = async {
let! data = getData()
data
|> Seq.iter (printfn "%A")
}
或者,我可以使用 Async.RunSynchronously
来调用它(效率低下!)和管道,并且没有临时标签:
let showData2() = async {
getData()
|> Async.RunSynchronously
|> Seq.iter (printfn "%A")
}
我喜欢 showData2
的语法但知道调用Async.RunSynchronously
绑定(bind)调用线程。
是否有在某处定义的语法、运算符或函数允许我通过管道传输 Async<'T>
进入接受 'T
的函数?
最佳答案
听起来你想要map
用于异步
:
let mapAsync f a = async {
let! v = a
return (f v)
}
那么你可以这样做:
let m: Async<unit> = getData() |> mapAsync (Seq.iter (printfn "%A"))
关于f# - 调用 F# 异步工作流程时,我可以避免定义临时标签吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30416774/