MVC4任务<ienumerable>不等待</ienumerable>

时间:2013-06-17 13:42:47

标签: c# asp.net-mvc

我正在查看示例,只是试图了解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吗?我习惯在客户端做这种事情,所以我很感激这些方法的帮助......

1 个答案:

答案 0 :(得分:7)

您正在await上致电ctx.Students.ToList()。此方法(ToList())不会返回Task,因此无法等待。