我不确定你所说的“原始”是什么意思。Async.Parallel
是一个函数。以下是运行两个异步的几种方法:
在平行下:
Async.Parallel([|async1; async2|])
或者
async {
let! child = Async.StartChild async2
let! result1 = child
let! result2 = async1
return [|result1; result2|]
}
依次:
async {
let! result1 = async1
let! result2 = async2
return [|result1; result2|]
}
您可以在最后两个中返回元组。我保持返回类型与第一个相同。
我会说let!
,do!
在一个async { }
块中,你将尽可能接近为此使用原语。
编辑
如果你遇到了所有这些讨厌的语法,你可以定义一个组合器:
let (<|>) async1 async2 =
async {
let! r1 = async1
let! r2 = async2
return r1, r2
}
然后做:
async1 <|> async2 |> Async.RunSynchronously