Я занимаюсь параллельным программированием с использованием 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 в качестве параметра. Task.WaitAll может иметь Task [] в качестве аргумента, но это не имеет смысла, потому что мне нужно получить Result для следующего вычисления.