#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