C# Collection.AsParallel()+收益回报

C# Collection.AsParallel()+收益回报,c#,plinq,yield-return,C#,Plinq,Yield Return,我的问题是关于PLINQ和YILD关键字组合的结果。如果我这样写会怎么样: //Some stuff here foreach (var x in collection.AsParallel()) { yield return new CustomObject { property1 = //Large calculations here property2 = x.Name //... etc. }; } 我到底想要什么

我的问题是关于PLINQ和YILD关键字组合的结果。如果我这样写会怎么样:

//Some stuff here
foreach (var x in collection.AsParallel())
{
    yield return new CustomObject
    {
        property1 = //Large calculations here
        property2 = x.Name
        //... etc.
    };
}
我到底想要什么?我想在不同的线程中初始化对象,但在某些线程需要时返回它们。 提前谢谢

AsParallel只允许使用LINQ操作的并行版本。它本身并没有做任何事情

因此,除了一点点额外的开销之外,您的代码在功能上与您完全省略了AsParallel没有什么不同

如果您希望实际能够并行地执行CustomObject实例的构造,并且希望使用PLINQ来执行此操作,那么您当然可以使用任意数量的其他工具来并行地创建对象,然后您将希望使用Select将一种类型的序列转换为另一种类型的序列,而不是使用您自己的自定义迭代器块。

AsParallel只支持使用LINQ操作的并行版本。它本身并没有做任何事情

因此,除了一点点额外的开销之外,您的代码在功能上与您完全省略了AsParallel没有什么不同


如果您希望实际能够并行地执行CustomObject实例的构造,并且希望使用PLINQ来执行此操作,那么您当然可以使用任意数量的其他工具来并行地创建对象,然后您将希望使用Select将一种类型的序列转换为另一种类型的序列,而不是使用自己的自定义迭代器块。

不太可能。在我的情况下,一切都是有效的,但问题是“怎么做?不是真的”。在我的情况下,一切都正常,但问题是“如何?谢谢你的解释!”!让我问一个与这个图书馆有关的问题。如果我这样做:.AsParallel.Selectx=>{var t=\u db//某些操作与db上下文有关;返回new…}我的连接有问题吗?我的意思是,第二个线程在第一个线程在同一上下文中结束执行之前开始工作?@user3818229我非常怀疑是否有任何数据库提供程序会支持它,但这当然取决于提供程序。感谢您的解释!让我问一个与这个图书馆有关的问题。如果我这样做:.AsParallel.Selectx=>{var t=\u db//某些操作与db上下文有关;返回new…}我的连接有问题吗?我的意思是,第二个线程在第一个线程在同一上下文中关闭执行之前开始工作?@user3818229我非常怀疑任何数据库提供程序是否会支持它,但这当然取决于提供程序。