我正在使用 F# 进行并行编程。对于固定数量的元素,例如 2 个元素 a1、a2 和一个函数 f,我可以执行以下操作:
let t1 = Task.Factory.StartNew(fun () -> f a1)
let t2 = Task.Factory.StartNew(fun () -> f a2)
Task.WaitAll(t1, t2)
t1.Result, t2.Result
我想知道如何对元素列表做同样的事情:
let ts = List.map (fun a -> Task.Factory.StartNew(fun () -> f a))
Task.WaitAll(ts)
List.map (fun (t: Task<_>) -> t.Result) ts
Visual Studio 发现 Task.WaitAll 不能接受 Task< T > 列表作为其参数。Task.WaitAll 可以将 Task [] 作为其参数,但这没有任何意义,因为我需要获取 Result 进行下一次计算。