有没有办法使用f#进行以下操作?
let expr0:Async<int> = get0...
let expr1:Async<string> = get1...
//please pretend that this compiles
let finalFuture:Async<string> =
Async.Map2 expr0 expr1 (fun (v0:int) (v1:string) -> v0 + v1 )
let final:string = Async.RunSynchronously finalFuture
答案 0 :(得分:5)
异步计算没有预定义的map
函数。也许是因为它实际上取决于你想要如何评估两个计算。
如果要按顺序运行它们,可以使用:
let finalFuture = async {
let! v0 = expr0
let! v1 = expr1
return v0 + v1 }
如果您想并行运行它们,可以使用Async.Parallel
或Async.StartChild
。例如:
let finalFuture = async {
let! v0Started = Async.StartChild(expr0)
let! v1Started = Async.StartChild(expr1)
let! v0 = v0Started
let! v1 = v1Started
return v0 + v1 }
在这两种情况下,更改代码以获取函数而不是直接调用+
非常容易,因此您应该能够使用这两个代码段来定义自己的map2
函数