mquickel
mquickel

Reputation: 390

MVC4 Task<IEnumerable> not awaitable

I'm looking at examples, just trying to understand the await keyword in a MVC AsyncController. I feel like the following should work as I am just trying to return a list asynchronously. This was just an example for understanding the async keyword:

    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(); 
    }

I get that Task<IEnumerable<Student>> is not awaitable. I was under the impression that Tasks are awaitable.

Updated: What about something like this (assuming the EF code has been abstracted to the .Select method?

    public async Task<ActionResult> Index()
    {
        var s = await SelectAsync();
        return View(s);
    }

     private async Task<IEnumerable<Student>> SelectAsync()
     {
        return _repo.Select();
     }

Or do I also need to use Task.Run inside the SelectAsync method as well? I'm used to doing this sort of thing in client-side so I appreciate the help here with these methods...

Upvotes: 1

Views: 1063

Answers (1)

You are calling awaiton ctx.Students.ToList(). This method (ToList()) does not return a Task and therefor is not awaitable.

Upvotes: 7

Related Questions