use*_*457 1 .net c# parallel-processing .net-4.5
我想做一些我认为相当基本的事情,但我还没有找到一个相当基本的例子.这就是我想要做的事情:
给定一个对象列表,我想迭代列表中的每个元素,并在其上调用一个相当资源密集的方法.我希望将其分配给正在运行的应用程序可用的核心,这样如果它在8核设备上运行,它一次最多可处理8个元素.所有的计算完全相互独立,我希望当一个元素完成处理时,列表中的下一个元素将被启动.
我不确定在任何给定时间列表中有多少项,我不知道有多少核可用.也许有时候只有一个核心.
谢谢.
Parallel.ForEach(items, currentItem =>
{
// TODO: process a current item
Debug.WriteLine("[{0}] {1} {2}",
Thread.Current.ManagedThreadId ,
DateTime.Now,
currentItem);
};
Run Code Online (Sandbox Code Playgroud)
items变量应该是实现IEnumerable或的类型的实例IEnumerable<T>.
您还可以指定ParallelOptions和MaxDegreeOfParalellism来控制ThreadPool在线程之间分配工作时可以使用的多个线程.
var options = new ParallelOptions
{
MaxDegreeOfParallelism = 2
};
Parallel.ForEach(items, options, currentItem =>
{
// TODO
});
Run Code Online (Sandbox Code Playgroud)
另请参阅MSDN:如何:编写一个简单的Parallel.ForEach循环
| 归档时间: |
|
| 查看次数: |
2499 次 |
| 最近记录: |