如何将以下内容变成 Parallel.ForEach?
public async void getThreadContents(String[] threads)
{
HttpClient client = new HttpClient();
List<String> usernames = new List<String>();
int i = 0;
foreach (String url in threads)
{
i++;
progressLabel.Text = "Scanning thread " + i.ToString() + "/" + threads.Count<String>();
HttpResponseMessage response = await client.GetAsync(url);
String content = await response.Content.ReadAsStringAsync();
String user;
Predicate<String> userPredicate;
foreach (Match match in regex.Matches(content))
{
user = match.Groups[1].ToString();
userPredicate = (String x) => x == user;
if (usernames.Find(userPredicate) != user)
{
usernames.Add(match.Groups[1].ToString());
}
}
progressBar1.PerformStep();
}
}
我在假设异步和并行处理相同的情况下对其进行了编码,但我刚刚意识到事实并非如此。我查看了我能找到的所有问题,但我似乎真的找不到适合我的例子。他们中的大多数缺乏可读的变量名。使用不解释它们包含的内容的单字母变量名称是陈述示例的可怕方式。
我通常在名为线程的数组中有 300 到 2000 个条目(包含论坛线程的 URL),并且似乎并行处理(由于许多 HTTP 请求)会加快执行速度)。
在我可以使用 Parallel.ForEach 之前,我是否必须删除所有异步(我在 foreach 之外没有任何异步,只有变量定义)?我该怎么做呢?我可以在不阻塞主线程的情况下做到这一点吗?
顺便说一句,我正在使用 .NET 4.5。