ASP.NET-Core MVC6 foreach 语句不能对 'System.Threading.Tasks.Task<..> 类型的变量进行操作

ASP.NET-Core MVC6 foreach statement cannot operate on variables of type 'System.Threading.Tasks.Task<..>

我正在获取 menuItems 列表 - 来自服务异步方法的对象 returns...

System.Threading.Tasks.Task<System.Collections.Generic.List<MyNav.Models.Menu.MenuItem>>

调用它的代码是:

var MainHeadings = _menuService.GetListByParentId(0)>;
foreach (var item in MainHeadings)
{
    ...
}

错误在 "foreach" 中的 MainHeadings 上,错误是:

Error CS1579 foreach statement cannot operate on variables of type 'System.Threading.Tasks.Task<System.Collections.Generic.List<MyNav.Models.Menu.MenuItem>>' because 'System.Threading.Tasks.Task<System.Collections.Generic.List<MyNav.Models.Menu.MenuItem>>' does not contain a public definition for 'GetEnumerator' MyNav.DNX 4.5.1, MyNav.DNX Core 5.0 C:\Users\simon\DEV\MyNav\src\MyNav\TagHelpers\Menu\DisplayAllMenuItems.cs 50 Active

调用 _menuService 的 class 是自定义 TagHelper,我确实尝试将 tagHelper 更改为异步,例如

public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
}

但结果没有正确呈现。

有没有办法解决这个问题,因为它在服务方法同步时有效...

OK 解决了这个问题。我相信服务需要在继续之前完成。通过在调用 _menuService 之前放置 "await" 它可以正常工作。

          var MainHeadings = await _menuService.GetListByParentId(0);

        foreach (var item in MainHeadings)
        {
            if (item.Header)
            {
                contentSb.Append(await _menuService.ManageHeader(item, indent));
            }
            else
            {
                contentSb.Append(_menuService.ReturnSimpleAnchor(item, indent));
            }
        }

我把等待放在了线上:

                contentSb.Append(await _menuService.ManageHeader(item, indent));

它奏效了。这是对异步方法的调用。