如何使用PLINQ初始化大数组并行?

Ste*_*fan 3 c# parallel-processing plinq

我正在尝试使用PLINQ初始化一个简单(但很大)的数组:

void Test(int width, int height)
{
    var foo = new Foo[width * height];
    foo.AsParallel().ForAll(c => new Foo());
}
Run Code Online (Sandbox Code Playgroud)

但是这将给我留下一个宽度为x height null(未初始化)元素的数组.

当然这必须是可能的,因为这个操作可能只是瘫痪(?).

使用PLINQ执行初始化的正确语法是什么?

wil*_*ien 5

我不怀疑有一种方法可以并行使用LINQ初始化一个数组,但是,我建议只使用Parallel.For代替:

var foo = new Foo[width * height];
Parallel.For(0, foo.Length, i => foo[i] = new Foo());
Run Code Online (Sandbox Code Playgroud)

编辑:既然你想要一个合适的PLINQ解决方案(也是你指出的固定拼写错误):

var foo = Enumerable.Range(0, width * height)
                    .AsParallel()
                    .Select(x => new Foo())
                    .ToArray();
Run Code Online (Sandbox Code Playgroud)

  • @ M.kazemAkhgary有时候OP要求的不是OP所需要的:) (2认同)