有一些文章指出,异步数据库调用是一个坏主意.网
在C#Async CTP上,有一个名为ExecuteReaderAsync
的System.Data.SqlClient.SqlCommand
扩展.我对现有代码进行了如下操作:
var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["hubConnectionString"].ConnectionString;
using (var conn = new SqlConnection(connectionString)) {
using (var cmd = new SqlCommand()) {
cmd.Connection = conn;
cmd.CommandText = "sp$DetailsTagsGetAllFromApprovedPropsWithCount";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
conn.Open();
var reader = cmd.ExecuteReader();
while (reader.Read()) {
//do the reading
}
conn.Close();
}
}
在我的代码中有几种类似的操作.所以,我正在考虑将它们转换为异步.
但另一方面,我没有看到这种方法有多大吸引力(也许我没有看到正确的方向,谁知道呢!).
那么,在这里使用这种新的异步编程模型有什么缺点吗?
Edit:个
假设我重构代码如下:
public async Task<IEnumerable<Foo>> GetDataAsync() {
List<Foo> foos = new List<Foo>();
var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["hubConnectionString"].ConnectionString;
using (var conn = new SqlConnection(connectionString)) {
using (var cmd = new SqlCommand()) {
cmd.Connection = conn;
cmd.CommandText = "sp$DetailsTagsGetAllFromApprovedPropsWithCount";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
conn.Open();
var reader = await cmd.ExecuteReaderAsync();
while (reader.Read()) {
//do the reading
//create foos
}
conn.Close();
}
}
return foos;
}
据我从await关键字了解,它将其后面的代码转换为continuation.此外,当它点击wait关键字时,无论操作状态如何,它都会立即返回调用方.当它完成时,它会返回并触发延续代码.
这就是我的 idea .