【发布时间】:2017-03-09 06:18:56
【问题描述】:
我有 1 种方法,我想在 10 个不同的并行线程中运行,它们都是独立的,彼此之间没有依赖关系,我的问题是,如果我有 100 个项目要处理并且想一次处理 10 个那么如何一次运行10个。我已经创建了一个示例代码,我正在使用Parallel.ForEach,但是我需要设置什么以便它一次运行 10 个线程并假设任何正在运行的任务已经完成然后它应该自动接受新的,所以所有 10线程应该很忙,直到并且除非所有项目都没有完成。
private void StartAccuracyCalculator()
{
List<MaterialComposition> lstMaterialComposition = DataHelper.GetMaterialComposition();
Parallel.ForEach(lstMaterialComposition, composition =>
{
try
{
CalculateAccuracy(composition);
}
catch (Exception ex)
{
//LogException(ex)
}
});
}
private void CalculateAccuracy(MaterialComposition composition)
{
/// actual process to perform
}
假设 lstMaterialComposition 从 DB 中获取 100 条记录,所以在 Parallel.ForEach 我想一次只运行 10 个项目,并且 10 个项目中的任何一个都已完成,因此来自 lstMaterialComposition 的下一个项目应该开始。
请建议Parallel.ForEach 是否有可能,或者有其他选择吗?
【问题讨论】:
标签: c# multithreading task-parallel-library threadpool