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使用的相关知识点。通过示例代码,详细介绍了Parallel.ForEach的使用方法和优化技巧。 一、使用Parallel.ForEach优化...
在.NET编程环境中,`Parallel.ForEach`是一个非常有用的并行处理工具,它允许开发者将数据集中的每个元素在多个线程上并行处理,以提高应用程序的执行效率。然而,正如标题所指出的,`Parallel.ForEach`可能会遇到...
`Parallel.For`、`Parallel.ForEach`以及`Parallel.ForEachAsync`是C#中的并行编程工具,用于实现高效的并行循环。这些方法来自`System.Threading.Tasks.Parallel`命名空间,是.NET的Task Parallel Library (TPL)的...
Parallel.ForEach类似于foreach循环,因为它迭代一个可枚举数据集,但与foreach不同的是,Parallel.ForEach使用多个线程来评估循环体的不同调用。结果证明,这些特性使得Parallel.ForEach成为数据并行编程的一个广泛...
这些方法包括`Parallel.For`和`Parallel.ForEach`,它们分别用于整数范围的并行循环和集合元素的并行遍历。 1. **Parallel.For** `Parallel.For`方法用于并行执行一个整数范围内的循环。它的基本语法如下: ```...
3. **数据并行性**:讲解如何使用Parallel.ForEach和Parallel.For方法处理集合,实现数据并行,提高大规模数据处理的效率。 4. **PLINQ(Parallel Language Integrated Query)**:并行版本的LINQ,允许开发者以...
3. **数据并行性**:书中会详细阐述如何使用Parallel类提供的静态方法(如Parallel.For和Parallel.Foreach)进行数据并行处理,这些方法可以自动分割工作负载,提高代码执行效率。 4. **并行流(Parallel Streams)**...
本文将深入探讨C#中的并行计算,主要关注`Parallel.Invoke()`、`Parallel.For()`以及`Parallel.ForEach()`这三个关键方法。 首先,`Parallel.Invoke()`方法允许开发者同时执行多个委托,这在需要执行一系列独立任务...
3. **数据并行性**:书中讨论了如何使用`Parallel.For`和`Parallel.ForEach`进行数据并行处理,这两种方法可以自动处理任务调度和线程同步,从而简化并行代码。 4. **PLINQ(Parallel LINQ)**:PLINQ是并行版本的...
重点介绍了`Parallel.For`和`Parallel.ForEach`方法,这些方法允许开发者以并行方式遍历集合或数组,从而显著提高数据密集型应用的性能。此外,还包括了如何使用`System.Threading.Tasks.Parallel`命名空间中的其他...
并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行任务 Parallel.For()、Prarllel.ForEach()循环。 并行计算,演示了Parallel.Invoke()并行...
这个技术主要通过`System.Threading.Tasks.Parallel`命名空间中的类和方法来实现,特别是`Parallel.For`和`Parallel.ForEach`等并行循环结构。本节将深入探讨.NET 4.x中的数据并行,以及如何使用`Parallel Task`进行...
该类提供了几种方法来简化并行任务的创建,包括Parallel.Invoke、Parallel.For和Parallel.ForEach。下面分别介绍: 1. Parallel.Invoke:这是一个非常直观的方法,可以将一组方法并行执行。例如,通过Parallel....
4. **并行ForEach循环(Parallel.ForEach)**: 类似于`Parallel.For`,`Parallel.ForEach`用于遍历集合,如数组或列表,并在不同线程上并行处理元素。这在处理大量数据时非常有用。 ```csharp List<int> numbers = ...
本示例“C#并行计算完整示例”着重展示了如何在C#中运用并行计算技术,包括pLINQ、Task以及Parallel For或Foreach。 首先,让我们详细了解一下pLINQ(Parallel Language Integrated Query)。pLINQ是LINQ(Language...
Parallel类提供了对数据并行操作的抽象,比如Parallel.For和Parallel.ForEach方法,它们可以将循环中的任务分解为多个子任务,然后在可用的核心上并行执行。 1. **Parallel.For**:这个方法用于并行执行一个整数...
- **ParallelForEach<T>Activity**:WF 提供了异常处理机制,可以在 ParallelForEach<T>Activity 内部捕获并处理异常,从而更灵活地控制流程。 - **System.Threading.Tasks.Parallel.ForEach**:异常处理方式类似于 ...
`Parallel`类提供了一系列静态方法,用于执行并行操作,如并行循环(`For`和`ForEach`)和并行查询(`Parallel LINQ (PLINQ)`)。这些方法内部会自动管理线程池,根据系统资源动态调整线程数量,以优化性能。使用`...
Parallel.For和Parallel.ForEach方法在每次迭代的时候调用相同的代码,而Parallel.Invoke()方法允许同时调用不同的方法。Parallel.ForEach()方法用于数据的并行性,Parallel.Invoke()方法用于任务的并行性。 1、For...