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 を取得する必要があるため意味がありません。