У меня такой код:
var list = new List<int> {1, 2, 3, 4, 5};
var result = from x in list.AsParallel()
let a = LongRunningCalc1(x)
let b = LongRunningCalc2(x)
select new {a, b};
Скажем, что методы LongRunningCalc занимают 1 секунду. Приведенный выше код занимает около 2 секунд для запуска, потому что в то время как список из 5 элементов работает параллельно, два метода, вызываемые из операторов let, вызываются последовательно.
Однако эти методы можно смело вызывать параллельно. Очевидно, что им нужно объединиться для select, но до тех пор, пока он не будет запускаться параллельно - select должен их ждать.
Есть ли способ достичь этого?