3

我想使用 PLINQ 在产品和类别之间执行内部连接。但我不确定是否应该为这两个集合调用 AsParallel 方法。

// PLINQ  - Option 1
jointTables =     from c in Homework02.categories.AsParallel()
                  join p in Homework02.productList on c.Name equals p.Category
                  select new { Category = c, Product = p };

// PLINQ  - Option 2
jointTables = from c in Homework02.categories.AsParallel()
              join p in Homework02.productList.AsParallel() on c.Name equals p.Category
              select new { Category = c, Product = p };
4

1 回答 1

5

您应该使用选项 2,即显式调用AsParallel()第二个序列。

MSDN 文档中关于Join第二个序列类型为 的重载IEnumerable<TInner>

永远不应调用此 Join 重载。此方法被标记为过时并且在调用时总是抛出 NotSupportedException。

另请注意声明中的过时属性:

[ObsoleteAttribute(@"The second data source of a binary operator 
                    must be of type System.Linq.ParallelQuery<T> 
                    rather than System.Collections.Generic.IEnumerable<T>. 
                    To fix this problem, use the AsParallel() extension
                    method to convert the right data source to
                    System.Linq.ParallelQuery<T>.")]
public static ParallelQuery<TResult> Join<TOuter, TInner, TKey, TResult>(
    this ParallelQuery<TOuter> outer,
    IEnumerable<TInner> inner,
    Func<TOuter, TKey> outerKeySelector,
    Func<TInner, TKey> innerKeySelector,
    Func<TOuter, TInner, TResult> resultSelector
)
于 2013-02-21T17:24:24.810 回答