在PLinq扩展方法中读取并行度

时间:2013-08-15 20:52:31

标签: c# linq task-parallel-library extension-methods plinq

我正在考虑制作自己的PLinq扩展方法,以提供我最近提出的问题中描述的功能:Specify task timeout in parallel linq to objects。我想尽可能多地重用现有的.Net结构,包括可能已经在PLinq查询中指定并行度的任何代码。

在下面的代码块中,我指定了一定程度的并行性。假设CustomForAll是一个与现有ForAll方法具有相同签名的自定义PLinq扩展方法,我如何读取TSource上指定的并行度?

private PictureList FetchPictures(List<Picture> wallResults) 
{                
        wallResults
            .AsParallel()
            .WithDegreeOfParallelism(10)
            .CustomForAll(delegate(Picture p){

1 个答案:

答案 0 :(得分:2)

不幸的是,这不是受支持的操作。 PLINQ的设计不允许第三方扩展,而不会恢复为IEnumerable<T>

并行度存储在ParallelQuery类中的私有成员变量private QuerySettings m_specifiedSettingsint? m_degreeOfParallism字段中。

您可以使用反射来提取它,但这是一个可能会发生变化的内部实现细节。