重构LINQ ForEach以返回IEnumerable <T>

Fil*_*ale 5 c# linq plinq

我正在使用以下CreateArray静态方法创建一个数组:

public static int[] CreateArray(int size)
{
    var ret = new int[size];
    ret[0] = 0;
    ret[1] = 1;

    Parallel.ForEach(Enumerable.Range(2, size - 2), i =>
    {
        ret[i] = Func(i).Count();
    });

    return ret;
}
Run Code Online (Sandbox Code Playgroud)

Func的样子:

public static IEnumerable<int> Func(int i)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

是否有可能在以下方面重构该CreateArray方法:

public static int[] CreateArray(int size)
{
    var tableFromIndex2 = ...
    return new[] { 0, 1 }
        .Concat(tableFromIndex2)
        .ToArray();
}
Run Code Online (Sandbox Code Playgroud)

svi*_*ick 1

我认为 PLINQ 在这里可能有用:

var tableFromIndex = ParallelEnumerable.Range(2, size - 2)
        .AsOrdered()
        .Select(i => Func(i).Count());

return new[] { 0, 1 }
        .Concat(tableFromIndex)
        .ToArray();
Run Code Online (Sandbox Code Playgroud)