我从数据库获得多级动态菜单。目前我已成功调用它,但我想让它异步。
这是我的代码;
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关键字进行异步?
请注意,它会循环,直到子项完全加载为止;
让异步(上面的代码)成为一个好习惯吗?
答案 0 :(得分:2)
不幸的是,async
动作过滤器尚不可用(尚未);见this question。您可以vote here让MVC团队添加此功能。
一旦MVC支持async
动作过滤器,您就可以使用例如GetAllAsync
。递归部分不需要任何async
功能,因为它不受I / O限制。