C#等待问题

时间:2015-12-03 09:21:07

标签: c# exception asynchronous async-await

documentsIDictionary<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;为什么?

1 个答案:

答案 0 :(得分:6)

每次评估时,listview变量都会创建一个新的任务集...所以在等待第一组任务完成后,你会迭代一个新的未完成的任务。对此的简单修复是添加对keys的调用:

ToList()