Я попытался сделать асинхронный вызов базы данных SQL Server и использовать его вместе с новыми асинхронными функциями ASP.NET MVC 4, но он странным образом не возвращается вообще.Я отладил код, работает хорошо, но как-то HTTP-запрос навсегда остается открытым.
Вот что я сделал:
Это метод вызова базы данных:
public async Task<IEnumerable<Car>> GetCarsAsync() {
var connectionString = ConfigurationManager.ConnectionStrings["CarGalleryConnStr"].ConnectionString;
var asyncConnectionString = new SqlConnectionStringBuilder(connectionString) {
AsynchronousProcessing = true
}.ToString();
using (var conn = new SqlConnection(asyncConnectionString)) {
using (var cmd = new SqlCommand()) {
cmd.Connection = conn;
cmd.CommandText = selectStatement;
cmd.CommandType = CommandType.Text;
conn.Open();
using (var reader = await cmd.ExecuteReaderAsync()) {
return reader.Select(r => carBuilder(r)).ToList();
}
}
}
}
Здесь, Select
метод на SqlDataReader
- это метод расширения, который яреализованы.carBuilder
закрытый метод просто возвращает обратно экземпляр Car
класса.
Это класс контроллера:
public class HomeController : Controller {
private readonly GalleryContext ctx = new GalleryContext();
public async Task<ViewResult> IndexAsync() {
return View("Index", await ctx.GetCarsAsync());
}
}
Есть идеи, что мне не хватает?