等待ForEach - 如何等待每次迭代完成?

时间:2014-05-13 21:36:36

标签: c#

我有一个网址列表List<string>。我想遍历每个URL并下载页面上的内容。从URL下载内容的方法是异步的。我想等待每次迭代完成

foreach(string url in urlList)
{
    await DownloadPage(url);
}

下载方法:

private async Task DownloadPage(string url)
{
    // await Download content using HttpClient
    // Save file
}

目前发生的事情是它在每个ForEach中循环而不等待它完成。

如何实现解决方案,以便每次迭代等待页面下载?

2 个答案:

答案 0 :(得分:1)

而不是在这里使用await关键字,您也可以在方法调用上调用.Result,任务一定会被解析,您将在现场获得结果。你的代码看起来像这样:

foreach(string url in urlList)
{
    DownloadPage(url).Result;
}

答案 1 :(得分:-2)

听起来你需要Task.WaitAll()方法:

// off the top of my head, syntax not guaranteed to be 100% correct :)
List<Task> tasks = new List<Task>();
foreach(string url in urlList) 
{
    tasks.Add(Task.Factory.StartNew(DownloadPage));
    Task.WaitAll(tasks.ToArray()); 
}
相关问题