如何使用Task <List <T >>从多个方法填充List <T>?

Els*_*mer 1 c# task-parallel-library async-await

我还在尝试处理新的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;
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

听起来你只是想把一个转换List<string>[]为一个IEnumerable<string>,这不是特定于异步的......普通的LINQ会做到这一点:

var errors = results.SelectMany(x => x);
Run Code Online (Sandbox Code Playgroud)

这将使列表数组变为单个序列.