【发布时间】:2013-12-26 20:43:54
【问题描述】:
假设我有一个非常简单的网络服务:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SomeServices
{
[OperationContract]
[WebGet]
public IEnumerable<int> GetSomeDatabaseNumbers()
{
return DB.GetMeSomeNumbers();
}
}
DBGetMeSomeNumbers 方法进行一些数据库检索。
我一直在读到,在我们等待数据库检索数据时,上述内容会导致请求阻塞,因此我希望使用 .net 4.5 中的新异步功能来摆脱这种阻塞在我们等待数据库返回时发出并处理更多请求。我已经像这样通过数据库调用重写了:
public class DB {
public static async Task<int[]> GetMeSomeNumbers()
{
List<int> rtnEntities = new List<int>();
using (MySqlConnection sqlConn = new MySqlConnection(Settings.ConnectionString))
{
MySqlCommand sqlCmd = new MySqlCommand("SELECT number from SomeTable", sqlConn);
sqlConn.Open();
using (MySqlDataReader sqlRdr = await sqlCmd.ExecuteReaderAsync())
{
while (sqlRdr.Read())
{
rtnEntities.Add(sqlRdr.GetInt32(0));
}
sqlRdr.Close();
}
sqlConn.Close();
}
return rtnEntities.ToArray();
}
}
如何修改我的 Web 服务调用以使用这个新的 Async 方法?
【问题讨论】:
-
与您的问题没有直接关系,但您可以删除
sqlRdr.Close();和sqlConn.Close();行,因为您的using语句会自动处理这些行。 -
我从您的标题中删除了“C#”,因为无论服务是用什么语言编写的 - 都会有同样的问题。
标签: c# .net web-services asynchronous