我试图修改现有的数据库调用,以便进行异步数据库调用。这是我第一次涉足异步数据库调用,因此我查看了this post,this post以及this MSDN article的前两部分。这是我提出的代码,类似于在第二篇文章的第二个答案中找到的代码:
public async Task<IEnumerable<Item>> GetDataAsync(int id)
{
using (SqlConnection conn = new SqlConnection(oCSB.ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("stored_procedure", conn))
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("param", "value");
await conn.OpenAsync();
SqlDataReader reader = await cmd.ExecuteReaderAsync();
return ReadItems(reader, id).ToList();
}
}
}
private IEnumerable<Item> ReadItems(SqlDataReader reader, long id)
{
while (reader.Read())
{
var item = new Item(id);
yield return item;
}
}
应用程序是一个Web窗体应用程序,调用是由一个jQuery ajax请求启动到aspx页面中的静态WebMethod,然后调用GetDataAsync方法。不幸的是,应用程序挂起在cmd.ExecuteReaderAsync调用上,没有异常抛出,我还没有找到原因。我已经在VS dev服务器和我的本地IIS 8上运行了它,但是我得到了相同的结果。我也尝试过修改它,以便在桌面上进行非常简单的选择。我也尝试根据我在MSDN或SO上遇到的其他帖子更改代码。有人知道什么可能导致它挂起ExecuteReaderAsync调用吗?