代码之家  ›  专栏  ›  技术社区  ›  Pரதீப்

在并行C中调用异步方法#

  •  0
  • Pரதீப்  · 技术社区  · 7 年前

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

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

    现在,我想调用上面的方法来并行地列出值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);
    

    直到现在一切都正常,问题在于从任务中提取结果。我试图提取结果,就像

    foreach(var ta in tasks) {
        var res = await ta;//error in this line
    }
    

    但它说

    CS0815无法将void赋给隐式类型变量

    我这里缺什么?

    1 回复  |  直到 7 年前
        1
  •  7
  •   John Wu    7 年前

    而不是

    var tasks = new List<Task>();
    

    改为使用:

    var tasks = new List<Task<Dictionary<DateTime, HistPrice>>>();
    

    或者替换它 你的前臂环 加上一点LINQ,就不用担心这个类型了。

    var tasks = seriesIdDist.Select( n => GetPrices(n) ).ToList();