【问题标题】:how to return async from select properly?如何正确从选择返回异步?
【发布时间】:2021-04-02 13:46:54
【问题描述】:
  var abc= await homeFixtures.Select(async x =>
            {
                var home = _teamService.GetTeam(x.HomeId);                
                return await home.GetSeName();
            });

得到错误:“IEnumerable 不包含 'GetAwaiter' 的定义,并且找不到接受 IEnumerable' 类型的第一个参数的可访问扩展方法 'GetAwaiter'

【问题讨论】:

    标签: c#


    【解决方案1】:

    awaitTask 一起使用。 Select 返回任务列表。您需要使用 Task.WhenAll 来等待所有这些任务并检索它们的结果,例如:

    var tasks= homeFixtures.Select(async x =>
                {
                    var home = _teamService.GetTeam(x.HomeId);                
                    return await home.GetSeName();
                });
    var abc=await Task.WhenAll(tasks);
    

    home.GetSeName()返回的结果在Select中没有用到,所以可以去掉await直接返回任务:

    var tasks= homeFixtures.Select(x =>
                {
                    var home = _teamService.GetTeam(x.HomeId);                
                    return home.GetSeName();
                });
    var abc=await Task.WhenAll(tasks);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      • 2016-10-03
      • 2022-10-02
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      相关资源
      最近更新 更多