代码之家  ›  专栏  ›  技术社区  ›  dkackman Srinivas Kokkula

parallel.foreach需要asparallel()吗?

  •  18
  • dkackman Srinivas Kokkula  · 技术社区  · 15 年前

    ParallelEnumerable 具有静态成员 AsParallel . 如果我有 IEnumerable<T> 并且想要使用 Parallel.ForEach 这是否意味着我应该一直使用 平行的 ?

    例如 这两个都是正确的吗(其他都是平等的)?

    没有 平行的 以下内容:

    List<string> list = new List<string>();
    Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)), f => list.Add(f));
    

    或与 天门冬氨酸 ?

    List<string> list = new List<string>();
    Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)).AsParallel(), f => list.Add(f));
    
    1 回复  |  直到 14 年前
        1
  •  22
  •   Nick Craver    15 年前

    这取决于被称为什么,它们是独立的问题。

    .AsParallel() 平行于 枚举 不是任务委托。

    Parallel.ForEach 平行化 ,将任务分配给每个元素的工作线程。

    因此,除非源枚举从并行(例如 reader.Match(file) 很贵),他们是平等的。最后一个问题, ,两者都是正确的。

    另外,还有一个其他的结构,你可能想看一下,它缩短了一点,仍然得到了最大的好处的plinq:

    GetFileList().Where(file => reader.Match(file)).ForAll(f => list.Add(f));