【发布时间】:2013-05-01 11:19:08
【问题描述】:
例子
var options = new ParallelOptions()
{
MaxDegreeOfParallelism = 10
};
List<string> lstAllUrls = File.ReadAllLines("myList.txt").ToList<string>();
Parallel.ForEach(lstAllUrls, options, myFunctionThatFetchPage);
现在这工作得很好。我想知道的是:我如何知道我目前处于哪个迭代中。我的意思是说我的列表有 100000 个 URL。它开始获取它们。但我也想在屏幕上打印当前正在获取的 URL。
我该怎么做?如何判断当前循环位于给定列表的哪一项?
【问题讨论】:
-
您应该在
myFunctionThatFetchPage中执行此操作。例如,在函数的开头,您可以将 url 添加到列表中,并在最后将其删除。请注意,根据您要更新的内容,您可能需要在更新列表时回调 UI 线程。 -
你不知道url的处理顺序,会并行运行。
-
@GeorgeDuckett 感谢这是一个选项。我想知道在 for 循环中是否有任何索引。
-
@Jodrell 我唯一想知道的就是它正在处理 url 列表中的 url。我的意思是 foreach 必须有一个索引才能知道接下来要处理哪个项目。
-
报告进度而不是它当前正在处理的索引可能更有意义。即在你的函数中只增加一个计数器并显示它。
标签: c# parallel.foreach