我正在查看示例,只是试图了解MVC AsyncController中的await
关键字。我觉得以下应该工作,因为我只是试图异步返回一个列表。这只是了解async
关键字的一个示例:
public async Task<ActionResult> Index()
{
var s = await SelectAsync();
return View(s);
}
private async Task<IEnumerable<Student>> SelectAsync()
{
var ctx = new Test.MVC4.Repository.StudentDataContext;
return await ctx.Students.ToList();
}
我明白Task<IEnumerable<Student>>
是不可行的。我的印象是Task
是等待的。
更新:这样的事情怎么样(假设EF代码被抽象为.Select方法?
public async Task<ActionResult> Index()
{
var s = await SelectAsync();
return View(s);
}
private async Task<IEnumerable<Student>> SelectAsync()
{
return _repo.Select();
}
或者我还需要在SelectAsync方法中使用Task.Run吗?我习惯在客户端做这种事情,所以我很感激这些方法的帮助......
答案 0 :(得分:7)
您正在await
上致电ctx.Students.ToList()
。此方法(ToList()
)不会返回Task
,因此无法等待。