我有一个项目列表,我想浏览每个项目,创建一个任务并启动该任务。但是,我希望它一次完成 10 个任务。
例如,如果我在一个列表中有 100 个 URL,我希望它将它们分组为 10 个批次,并循环通过批次从每批迭代的 10 个 URL 中获取 Web 响应。
这可能吗?
我正在使用 C# 5 和 .NET 4.5。
您可以使用Parallel.For()
or Parallel.ForEach()
,它们将在多个任务上执行工作。
MaxDegreeOfParallelism
当您需要精确控制批次时,您可以使用自定义分区器,但考虑到问题在于 URL,使用更常见的选项可能更有意义。
Partitioner 有一个很好的算法来创建批次,这也取决于内核的数量。
Parallel.ForEach(Partitioner.Create(from, to), range =>
{
for (int i = range.Item1; i < range.Item2; i++)
{
// ... process i
}
});