F#异步映射不同的类型

jam*_*o00 1 f# asynchronous functional-programming

有没有办法使用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
Run Code Online (Sandbox Code Playgroud)

Tom*_*cek 6

map异步计算没有预定义的函数.也许是因为它真的取决于你想要如何评估这两个计算.

如果要按顺序运行它们,可以使用:

let finalFuture = async {
  let! v0 = expr0
  let! v1 = expr1
  return v0 + v1 }
Run Code Online (Sandbox Code Playgroud)

如果要并行运行它们,可以使用Async.ParallelAsync.StartChild.例如:

let finalFuture = async {
  let! v0Started = Async.StartChild(expr0)
  let! v1Started = Async.StartChild(expr1)
  let! v0 = v0Started
  let! v1 = v1Started
  return v0 + v1 }
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,更改代码以获取函数而不是+直接调用将非常容易,因此您应该能够使用这两个片段来定义自己的map2函数.