1

我仍在尝试处理新的 async/await 运算符。我有几个返回 Task> 的异步方法,我计划用它们来捕获结果集的问题 - 主要目的是可以同时进行多项检查。

事实上,当我等待 Task.WhenAll() 时,我得到一个 List[] ,我必须通过它来获得我想要的东西。我认为必须有更好的方法来做到这一点 - 任何帮助将不胜感激!

这是我的测试代码(我使用 Linqpad 作为测试平台):结果是 List[],而 ErrorList 是我希望它看起来的样子。再次感谢!

async Task Main()
{
    var results = await Task.WhenAll (FirstCheck(), SecondCheck());
    var ErrorList = new List<string>();
    foreach (var d in results)
    {
        foreach (var i in d)
        {
            ErrorList.Add(string.Format("error: {0}",i));
        }
    }
    results.Dump();
    ErrorList.Dump();
}

async Task<List<string>> FirstCheck()
{
    List<string> Errors = new List<string>{"a","b","c"};
    return Errors;
}

  async Task<List<string>> SecondCheck()
{
    List<string> Errors = new List<string>{"a","b","c"};
    return Errors;
}
4

1 回答 1

7

听起来您只是想将 a 转换List<string>[]为a IEnumerable<string>,这不是特定于异步的...普通的LINQ会这样做:

var errors = results.SelectMany(x => x);

这会将列表数组展平为一个序列。

于 2013-06-02T21:08:52.860 回答