0

我正在从数据库中获取多级动态菜单。目前我已经成功调用它,但我想让它异步。
这是我的代码;

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var menus = Uow.Menus.GetAll()
        .Select(m => new ParentMenuViewModel()
        {
            MenuId = m.MenuId,
            Name = m.Name,
            ParentId = m.ParentId
        })
        .ToList<ParentMenuViewModel>();
    ViewBag.Menus = CreateVM(0, menus);
    base.OnActionExecuting(filterContext);
}

public IEnumerable<ParentMenuViewModel> CreateVM(int parentid, List<ParentMenuViewModel> list)
{
    return list.Where(m=> m.ParentId==parentid)
        .Select(m=> new ParentMenuViewModel()
        {
            MenuId = m.MenuId,
            Name = m.Name,
            ParentId = m.ParentId,
            ChildMenus = CreateVM(m.MenuId, list)
        });
}

那么,我怎样才能使用 async 和 await 关键字使这个异步呢?
请注意,它会循环直到子项完全加载;
让它异步(上面的代码)甚至是一个好习惯吗?

4

1 回答 1

2

不幸的是,async动作过滤器(还)不可用;看到这个问题。您可以在此处投票支持 MVC 团队添加此功能。

一旦 MVC 支持async动作过滤器,您就可以使用,例如GetAllAsync. 递归部分不需要任何async功能,因为它不受 I/O 限制。

于 2013-05-19T14:38:16.400 回答