Collection.AsParallel()+ yield return

时间:2017-04-19 14:32:20

标签: c# plinq yield-return

我的问题是组合PLINQ和yield关键字的结果。如果我这样写,会发生什么:

//Some stuff here
foreach (var x in collection.AsParallel())
{
    yield return new CustomObject
    {
        property1 = //Large calculations here
        property2 = x.Name
        //... etc.
    };
}

我真正想要的是什么?我想在不同的线程中初始化对象,但是当它们中的一些需要时返回它们 提前谢谢!

1 个答案:

答案 0 :(得分:3)

AsParallel只允许使用LINQ操作的并行版本。它实际上并不是其中任何东西。

因此,除了一小部分额外开销之外,您的代码在功能上与完全省略AsParallel没有区别。

如果你想真正能够并行执行CustomObject个实例的构建,并且你想使用PLINQ来做(当然,你可以使用任意数量的其他工具来创建对象并行),那么你将需要使用Select将一种类型的序列转换为另一种类型的序列,而不是使用自己的自定义迭代器块。