У меня такой код:
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
должен их ждать.
Есть ли способ достичь этого?