并行调用异步方法c#

Pரத*_*ீப் 0 c# methods asynchronous task async-await

我有一个接受int输入和返回的方法Task<Dictionary<DateTime, HistPrice>>

public static async Task<Dictionary<DateTime, HistPrice>> GetPrices(int seriesId) {
    ...
    return Dictionary<DateTime, HistPrice>;
}
Run Code Online (Sandbox Code Playgroud)

现在我想并行调用上面的方法来获取值1,2,3,4,5,6,7,8的列表.

List<int> seriesIdDist = new List<int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8 });

var tasks = new List<Task>();
foreach(var t in seriesIdDist) {
    tasks.Add(GetPrices(t));
}
await Task.WhenAll(tasks);
Run Code Online (Sandbox Code Playgroud)

直到这里一切正常,问题在于从任务中提取结果.我试着像提取结果一样

foreach(var ta in tasks) {
    var res = await ta;//error in this line
}
Run Code Online (Sandbox Code Playgroud)

但它说

CS0815无法为隐式类型变量赋值void

我在这里错过了什么?

Joh*_* Wu 7

代替

var tasks = new List<Task>();
Run Code Online (Sandbox Code Playgroud)

请改用:

var tasks = new List<Task<Dictionary<DateTime, HistPrice>>>();
Run Code Online (Sandbox Code Playgroud)

或者用一点LINQ 替换它和你的foreach循环,这样你就不用担心类型了.

var tasks = seriesIdDist.Select( n => GetPrices(n) ).ToList();
Run Code Online (Sandbox Code Playgroud)