从Task.WhenAll获得结果

时间:2015-07-22 04:50:23

标签: c# task-parallel-library

我有多个任务返回我想用Task.WhenAll(new[]{t1,t2,t3});调用的相同对象类型并读取结果。

当我尝试使用

Task<List<string>> all = await Task.WhenAll(new Task[] { t, t2 }).ConfigureAwait(false);

我收到编译错误

  

无法隐式转换类型'void'   'System.Threading.Tasks.Task<System.Collections.Generic.List<string>>

这两个任务的调用方法与此类似。

private Task<List<string>> GetFiles(string path)
{
    files = new List<string>();
    return  Task.Run(() =>
    {
       //remove for brevity 
        return files;
    });
}

2 个答案:

答案 0 :(得分:7)

看起来您正在使用不返回值的WaitAll()重载。如果您进行了以下更改,它应该可以正常工作。

List<string>[] all = await Task.WhenAll(new Task<List<string>>[] { t, t2 })
                               .ConfigureAwait(false);

答案 1 :(得分:3)

WhenAll的返回类型是一个任务,其结果类型是各个任务的结果类型的数组,在您的情况下为Task<List<string>[]>

在await表达式中使用时,任务将被“解包”到其结果类型中,这意味着“all”变量的类型应为List<string>[]