我有一个网址列表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
中循环而不等待它完成。
如何实现解决方案,以便每次迭代等待页面下载?
答案 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());
}