1

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

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

调用它的代码是:

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

错误出现在“foreach”中的 MainHeadings 上,错误是:

错误 CS1579 foreach 语句无法对“System.Threading.Tasks.Task<System.Collections.Generic.List<MyNav.Models.Menu.MenuItem>>”类型的变量进行操作,因为“System.Threading.Tasks.Task<System.Collections” .Generic.List<MyNav.Models.Menu.MenuItem>>' 不包含 'GetEnumerator' MyNav.DNX 4.5.1、MyNav.DNX Core 5.0 C:\Users\simon\DEV\MyNav\src\ 的公共定义MyNav\TagHelpers\Menu\DisplayAllMenuItems.cs 50 活动

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

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

但结果没有正确呈现。

当服务方法同步时,有没有办法解决这个问题......

4

1 回答 1

3

好的解决了这个问题。我相信服务需要在继续之前完成。通过在调用 _menuService 之前放置“等待”,它可以正常工作。

          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));
            }
        }

我将 await 放在了线上:

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

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

于 2016-05-22T09:34:16.803 回答