1

我正在查看示例,只是想了解awaitMVC AsyncController 中的关键字。我觉得以下应该可以工作,因为我只是想异步返回一个列表。这只是理解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>>是不可等待的。我的印象是Tasks 是可以等待的。

更新:这样的事情怎么样(假设 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 吗?我习惯于在客户端做这种事情,所以我很感激这些方法的帮助......

4

1 回答 1

7

你在await打电话ctx.Students.ToList()。此方法 ( ToList()) 不返回 a Task,因此不可等待。

于 2013-06-17T13:45:40.653 回答