mvc 5中异步编程的各种错误

时间:2014-07-05 15:22:43

标签: c# asp.net-mvc asynchronous

所以我正在编写教程here

基于此,我有以下代码:

namespace LoganMVC.Controllers
{
    public class UsersController : AsyncController
    {
        //
        // GET: /Users/

        public async Task<ActionResult> Index()
        {
            UserModel u = new UserModel();
            var users = await u.GetUsers();

            return View(users);
        }
    }
}

namespace LoganMVC.Models
{
    public class UserModel
    {
        public async Task<List<User>> GetUsers()
        {
            WebUser u = new WebUser();
            List<User> users = await u.GetUsers();
            return users;
        }
    }
}

namespace Logan.Web.Data
{
    public class WebUser
    {
        WebDBContext db = new WebDBContext();

        public async Task<List<User>> GetUsers()
        {
            var query = from u in db.Users
                        orderby u.Username
                        select u;

            List<User> data = await query.Include(x => x.Role).ToListAsync();
            return data;

            // this returned when I had it synchronous
            //return db.Users.Include(x => x.Role).ToList();
        }
    }
}

在每个public async Task<T>函数上,函数名称带有下划线红色,并显示以下错误:

  

找不到'async'修饰符所需的所有类型。您是针对错误的框架版本,还是缺少对程序集的引用?

此外,在我使用.ToListAsync()的地方,我收到此错误:

  

'System.Linq.IQueryable dos不包含'ToListAsync'的定义,并且没有可以找到接受类型'System.Link.IQueryable'的第一个参数的扩展方法'ToListAsync'(你是否缺少using指令或者装配参考?)

正如您所看到的,本文未涵盖使用指令或程序集引用的内容,因此我基本上只是添加了指令,因为VS允许我这样做。

任何人都可以清理我在这里缺少或不理解的东西吗?

提前致谢!

编辑

更新到.NET 4.5,现在,除了上面提到的错误之外,我还有一个:

  

错误2预定义类型'System.Runtime.CompilerServices.IAsyncStateMachine'未定义或导入D:\ Development \ Logan \ LoganWeb \ Logan.Web.Data \ CSC Logan.Web.Data

对此的一些帮助也将不胜感激。

1 个答案:

答案 0 :(得分:1)

根据评论,您使用的.NET 4.0框架并不支持async/await个关键字。 您可以将框架版本升级到4.5,也可以从nuget获取Microsoft.Bcl.Async包,将这些功能添加到.NET 4.0