如何使用 c#.net 4.0 运行 在最大定义的并行线程中执行任务
How to run a task in max defined parallel threads using c#.net 4.0
我有 1 个方法想 运行 在 10 个不同的并行线程中,所有线程都是独立的,彼此之间没有依赖关系,我的问题是如果我有 100 个项目要处理并且想要一次处理 10 个,然后如何在 运行 中一次处理 10 个。我已经在使用 Parallel.ForEach
的地方创建了一个示例代码,但是我需要设置什么才能一次 运行 10 个线程并假设任何 运行ning 任务已经完成然后它应该自动采用新的,所以所有 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
从数据库中获取 100 条记录,所以在 Parallel.ForEach
中我只想 运行 一次只处理 10 项,并且 10 项中的任何一项都已完成,因此下一项来自 lstMaterialComposition
应该开始了。
请建议 Parallel.ForEach
是否可行,或者是否有其他选择?
您可以使用ParallelOptions.MaxDegreeOfParallelism属性来限制任务数量。
MaxDegreeOfParallelism
MaxDegreeOfParallelism 属性 影响通过传递给此 ParallelOptions 实例的并行方法调用的并发操作数 运行。正 属性 值将并发操作数限制为设置值。如果为-1,则表示并发运行ning个数没有限制
Parallel.ForEach(
lstMaterialComposition,
new ParallelOptions { MaxDegreeOfParallelism = 10 },
composition => {
try
{
CalculateAccuracy(composition);
}
catch (Exception ex)
{
//LogException(ex)
}
}
);
我有 1 个方法想 运行 在 10 个不同的并行线程中,所有线程都是独立的,彼此之间没有依赖关系,我的问题是如果我有 100 个项目要处理并且想要一次处理 10 个,然后如何在 运行 中一次处理 10 个。我已经在使用 Parallel.ForEach
的地方创建了一个示例代码,但是我需要设置什么才能一次 运行 10 个线程并假设任何 运行ning 任务已经完成然后它应该自动采用新的,所以所有 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
从数据库中获取 100 条记录,所以在 Parallel.ForEach
中我只想 运行 一次只处理 10 项,并且 10 项中的任何一项都已完成,因此下一项来自 lstMaterialComposition
应该开始了。
请建议 Parallel.ForEach
是否可行,或者是否有其他选择?
您可以使用ParallelOptions.MaxDegreeOfParallelism属性来限制任务数量。
MaxDegreeOfParallelism MaxDegreeOfParallelism 属性 影响通过传递给此 ParallelOptions 实例的并行方法调用的并发操作数 运行。正 属性 值将并发操作数限制为设置值。如果为-1,则表示并发运行ning个数没有限制
Parallel.ForEach(
lstMaterialComposition,
new ParallelOptions { MaxDegreeOfParallelism = 10 },
composition => {
try
{
CalculateAccuracy(composition);
}
catch (Exception ex)
{
//LogException(ex)
}
}
);