Различные ошибки при асинхронном программировании в mvc 5

#c# #asp.net-mvc #asynchronous

#c# #asp.net-mvc #асинхронный

Вопрос:

Итак, я работаю над учебником здесь

На основе этого у меня есть следующий код:

 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’ и никакого метода расширения ‘ToListAsync’, принимающего первый аргумент типа ‘System.Link.Удалось найти ‘IQueryable’ (вам не хватает директивы using или ссылки на сборку?)

Как вы можете видеть, в статье не рассматривается, какие директивы using или ссылки на сборки мне понадобятся, поэтому я в основном просто добавил директивы, поскольку VS позволяет мне.

Кто-нибудь может прояснить, чего мне здесь не хватает или я чего-то не понимаю?

Заранее спасибо!

Редактировать

Обновлено до .NET 4.5 и теперь, в дополнение к ошибкам, упомянутым выше, у меня есть еще одна:

Ошибка 2 предопределенного типа ‘System.Runtime.Сервисы компилятора.IAsyncStateMachine’ не определен и не импортирован D:DevelopmentLoganLoganWebLogan.Web.DataCSC Logan.Web.Data

Некоторая помощь в этом также будет высоко оценена.

Комментарии:

1. Какую версию фреймворка вы используете?

2. Я только что заметил, что использую .net4, поэтому я обновляю до 4.5, как только nuget заработает

Ответ №1:

Согласно комментариям, вы используете платформу .NET 4.0, которая не поддерживает async/await ключевые слова. Вы можете либо обновить версию фреймворка до 4.5, либо получить пакет Microsoft.Bcl.Async от nuget, который добавляет эти возможности в .NET 4.0