我的印象是让!在 f# 中足够聪明,可以并行执行分配序列。但是,以下示例显示了不同的行为,a、b、c 的赋值似乎是同步执行的。
let sleep sec =
async
{
System.Threading.Thread.Sleep(sec * 1000)
return sec
}
let bar = async
{
let! a = sleep 1
let! b = sleep 3
let! c = sleep 3
return a+b+c
}
let foo = Async.RunSynchronously(bar)
printfn "%d" foo
这是/应该是这样吗?
如果我想并行执行 a、b、c,我应该使用 Async.Parallell ... |> Async.RunSynchronously ... 那么?
上面的示例当然没用,真正的用例可能是查询数据库并同时调用一些 Web 服务。