我想做一些我认为相当基础的事情,但我还没有找到一个相当基础的例子。这是我想要做的:
给定一个对象列表,我想遍历列表中的每个元素并对其调用一个相当耗费资源的方法。我想将其拆分为正在运行的应用程序可用的尽可能多的内核,这样如果它在 8 核设备上运行,它一次最多可以处理 8 个元素。所有的计算都是完全相互独立的,我希望当一个元素被处理完后,列表中的下一个元素就会开始。
我不确定在任何给定时间列表中会有多少项,也不知道有多少核心可用。有时可能是一个核心。
谢谢。
最佳答案
Parallel.ForEach(items, currentItem =>
{
// TODO: process a current item
Debug.WriteLine("[{0}] {1} {2}",
Thread.Current.ManagedThreadId ,
DateTime.Now,
currentItem);
};
items
变量应该是实现 IEnumerable
的类型的实例或 IEnumerable<T>
.
您也可以指定 ParallelOptions
和 MaxDegreeOfParalellism 来控制线程池可以使用的线程数,同时在线程之间分配工作。
var options = new ParallelOptions
{
MaxDegreeOfParallelism = 2
};
Parallel.ForEach(items, options, currentItem =>
{
// TODO
});
关于C#:并行处理列表的基本方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13057219/