documents
是IDictionary<string, string>
,参数为<filename, fileUrl>
DocumentHandler.Download()
返回Task<Memorystram>
此代码有效:
foreach (var x in documents.Keys)
{
var result = await DocumentHandler.Download(new Uri(documents[x]));
// other code
}
然而,它同步发展。
为了运行它所有async我写了这段代码:
var keys =
documents.Keys.Select(async x =>
{
return Tuple.Create(x, await DocumentHandler.Download(new Uri(documents[x])));
});
await Task.WhenAll(keys);
foreach (var item in keys)
{
var tpl = item.Result;
// other code
}
它不起作用,它崩溃而没有在最后一行显示异常var tpl = item.Result;
为什么?
答案 0 :(得分:6)
每次评估时,listview
变量都会创建一个新的任务集...所以在等待第一组任务完成后,你会迭代一个新的未完成的任务。对此的简单修复是添加对keys
的调用:
ToList()