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));
它奏效了。这是对异步方法的调用。
我正在获取 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));
它奏效了。这是对异步方法的调用。