gpt4 book ai didi

ASP.NET MVC 4 异步数据库调用 : never returns the HTTP response

转载 作者:行者123 更新时间:2023-12-04 00:46:07 25 4
gpt4 key购买 nike

我尝试对 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();
}
}
}
}

这里,SqlDataReader 上的Select 方法是我实现的扩展方法。 carBuilder 私有(private)方法只返回一个 Car 类的实例。

这是 Controller 类:

public class HomeController : Controller {

private readonly GalleryContext ctx = new GalleryContext();

public async Task<ViewResult> IndexAsync() {

return View("Index", await ctx.GetCarsAsync());
}
}

知道我错过了什么吗?

最佳答案

您的 Controller 仍然需要从 AsyncController 派生(参见 Exercise 4: Using Asynchronous Controllers ),但现在您需要编写更少的代码来获得与 Task<T> 相同的结果。 .

所以这应该可行:

public class HomeController : AsyncController {

private readonly GalleryContext ctx = new GalleryContext();

public async Task<ViewResult> IndexAsync() {

return View("Index", await ctx.GetCarsAsync());
}
}

关于ASP.NET MVC 4 异步数据库调用 : never returns the HTTP response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9983777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com