`
huhu_long
  • 浏览: 72465 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Parallel.ForEach

    博客分类:
  • .net
阅读更多
Parallel calculation is brought in from .net 4.0 framework.
So, please be careful to avoid using un-thread-safe collections such as List<> when using Parallel calculation.

Parallel.ForEach() has multiple overrided methods for using.

Generally, below two methods are used more frequently.

System.Threading.Tasks.Parallel.ForEach<TSource>(System.Collections.Generic.IEnumerable<TSource>, System.Action<TSource>)

System.Threading.Tasks.Parallel.ForEach<TSource>(System.Collections.Generic.IEnumerable<TSource>, System.Threading.Tasks.ParallelOptions, System.Action<TSource>)


An example will be like this:
private List<WorkflowTask> CreateTasks(List<NetworkServiceLayerTask> ncTasks, bool returnTaskAttributes, bool checkAvailability)
        {
            List<WorkflowTask> tasks = new List<WorkflowTask>();

            if (ncTasks == null || ncTasks.Count == 0) return tasks;

            Parallel.ForEach(ncTasks, new ParallelOptions { MaxDegreeOfParallelism = 50 }, ncTask =>
            {
                WorkflowTask task = ToTask(ncTask, returnTaskAttributes, checkAvailability);

                lock(tasks) tasks.Add(task);
            });

//          tasks.AddRange(from ncTask in ncTasks.AsParallel()
//                       select ToTask(ncTask, returnTaskAttributes, checkAvailability));

            return tasks;
        }

 private WorkflowTask ToTask(NetworkServiceLayerTask ncTask, bool returnTaskAttributes, bool checkAvailability)
{
    ......
    return task;
}


Pls refer to http://msdn.microsoft.com/en-us/library/dd460720.aspx to check another MSDN example.

Also, regarding the performance among "foreach, Parallel.For, Parallel.ForEach, Linq, PLinq", please see below two articles.
http://www.dotblogs.com.tw/asdtey/archive/2010/05/08/parallelforforeach.aspx
http://www.dotblogs.com.tw/asdtey/archive/2010/05/08/parallelplinq.aspx
分享到:
评论

相关推荐

    C#并发实战记录之Parallel.ForEach使用

    C#并发实战记录之Parallel.ForEach使用 本篇文章主要介绍了C#并发实战记录之Parallel.ForEach使用的相关知识点。通过示例代码,详细介绍了Parallel.ForEach的使用方法和优化技巧。 一、使用Parallel.ForEach优化...

    Parallel.ForEach的卡死现象(线程操作问题C#源码实例)

    在.NET编程环境中,`Parallel.ForEach`是一个非常有用的并行处理工具,它允许开发者将数据集中的每个元素在多个线程上并行处理,以提高应用程序的执行效率。然而,正如标题所指出的,`Parallel.ForEach`可能会遇到...

    Parallel.For,Parallel.ForEach,Parallel.ForEachAsync 使用实例

    `Parallel.For`、`Parallel.ForEach`以及`Parallel.ForEachAsync`是C#中的并行编程工具,用于实现高效的并行循环。这些方法来自`System.Threading.Tasks.Parallel`命名空间,是.NET的Task Parallel Library (TPL)的...

    When To Use Parallel-ForEach Or PLINQ.pdf

    Parallel.ForEach类似于foreach循环,因为它迭代一个可枚举数据集,但与foreach不同的是,Parallel.ForEach使用多个线程来评估循环体的不同调用。结果证明,这些特性使得Parallel.ForEach成为数据并行编程的一个广泛...

    在.net4.0中使用Parallel并行运算的示例

    这些方法包括`Parallel.For`和`Parallel.ForEach`,它们分别用于整数范围的并行循环和集合元素的并行遍历。 1. **Parallel.For** `Parallel.For`方法用于并行执行一个整数范围内的循环。它的基本语法如下: ```...

    Apress.Pro.dotNET.4.Parallel.Programming.in.CSharp.May.2010

    3. **数据并行性**:讲解如何使用Parallel.ForEach和Parallel.For方法处理集合,实现数据并行,提高大规模数据处理的效率。 4. **PLINQ(Parallel Language Integrated Query)**:并行版本的LINQ,允许开发者以...

    .net高级并行编程 Apress.Pro.dotNET.4.Parallel.Programming.in.CSharp.May.2010

    3. **数据并行性**:书中会详细阐述如何使用Parallel类提供的静态方法(如Parallel.For和Parallel.Foreach)进行数据并行处理,这些方法可以自动分割工作负载,提高代码执行效率。 4. **并行流(Parallel Streams)**...

    C# 并行计算示例

    本文将深入探讨C#中的并行计算,主要关注`Parallel.Invoke()`、`Parallel.For()`以及`Parallel.ForEach()`这三个关键方法。 首先,`Parallel.Invoke()`方法允许开发者同时执行多个委托,这在需要执行一系列独立任务...

    Wrox.Professional.Parallel.Programming.with.CSharp.Dec.2010.rar

    3. **数据并行性**:书中讨论了如何使用`Parallel.For`和`Parallel.ForEach`进行数据并行处理,这两种方法可以自动处理任务调度和线程同步,从而简化并行代码。 4. **PLINQ(Parallel LINQ)**:PLINQ是并行版本的...

    Wrox.Professional.Parallel.Programming.with.C#

    重点介绍了`Parallel.For`和`Parallel.ForEach`方法,这些方法允许开发者以并行方式遍历集合或数组,从而显著提高数据密集型应用的性能。此外,还包括了如何使用`System.Threading.Tasks.Parallel`命名空间中的其他...

    并行计算示例

    并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行...

    示例:异步编程:.NET4.X数据并行

    这个技术主要通过`System.Threading.Tasks.Parallel`命名空间中的类和方法来实现,特别是`Parallel.For`和`Parallel.ForEach`等并行循环结构。本节将深入探讨.NET 4.x中的数据并行,以及如何使用`Parallel Task`进行...

    并行开发——Parallel[收集].pdf

    该类提供了几种方法来简化并行任务的创建,包括Parallel.Invoke、Parallel.For和Parallel.ForEach。下面分别介绍: 1. Parallel.Invoke:这是一个非常直观的方法,可以将一组方法并行执行。例如,通过Parallel....

    C# 并行编程示例源码

    4. **并行ForEach循环(Parallel.ForEach)**: 类似于`Parallel.For`,`Parallel.ForEach`用于遍历集合,如数组或列表,并在不同线程上并行处理元素。这在处理大量数据时非常有用。 ```csharp List&lt;int&gt; numbers = ...

    C#并行计算完整示例

    本示例“C#并行计算完整示例”着重展示了如何在C#中运用并行计算技术,包括pLINQ、Task以及Parallel For或Foreach。 首先,让我们详细了解一下pLINQ(Parallel Language Integrated Query)。pLINQ是LINQ(Language...

    5天玩转并行编程-Parallel-第一天代码

    Parallel类提供了对数据并行操作的抽象,比如Parallel.For和Parallel.ForEach方法,它们可以将循环中的任务分解为多个子任务,然后在可用的核心上并行执行。 1. **Parallel.For**:这个方法用于并行执行一个整数...

    WORKFLOW AND PARALLELEXTENSIONS IN .NET FRAMEWORK 4

    - **ParallelForEach&lt;T&gt;Activity**:WF 提供了异常处理机制,可以在 ParallelForEach&lt;T&gt;Activity 内部捕获并处理异常,从而更灵活地控制流程。 - **System.Threading.Tasks.Parallel.ForEach**:异常处理方式类似于 ...

    C#多线程Demo

    `Parallel`类提供了一系列静态方法,用于执行并行操作,如并行循环(`For`和`ForEach`)和并行查询(`Parallel LINQ (PLINQ)`)。这些方法内部会自动管理线程池,根据系统资源动态调整线程数量,以优化性能。使用`...

    c# Parallel类的使用

    Parallel.For和Parallel.ForEach方法在每次迭代的时候调用相同的代码,而Parallel.Invoke()方法允许同时调用不同的方法。Parallel.ForEach()方法用于数据的并行性,Parallel.Invoke()方法用于任务的并行性。 1、For...

Global site tag (gtag.js) - Google Analytics