我正在考虑制作自己的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){
答案 0 :(得分:2)
不幸的是,这不是受支持的操作。 PLINQ的设计不允许第三方扩展,而不会恢复为IEnumerable<T>
。
并行度存储在ParallelQuery类中的私有成员变量private QuerySettings m_specifiedSettings
,int? m_degreeOfParallism
字段中。
您可以使用反射来提取它,但这是一个可能会发生变化的内部实现细节。