下面的方法执行 SQL Server 数据库中的查询:
private bool authenticated(SqlConnection conn)
{
string query = "some sql query";
SqlCommand cmd = new SqlCommand(query, conn);
// the intent is to change this to: SqlDataReader reader = await cmd.ExecuteReaderAsync();
SqlDataReader reader = cmd.ExecuteReader();
if (!reader.HasRows)
{
return false;
}
while (reader.Read())
{
// do some stuff
/*
if (some condition)
return true;
*/
}
}
执行查询的方法调用需要更改为异步版本。然而,该方法需要更改为async
。这样的方法不能返回除void
或Task
之外的任何内容。考虑编写另一个仅用于查询执行的方法,但aysnc
方法无法使用ref
参数。那么,最好的解决方案是什么?
SqlConnection
类不是线程安全的。在异步请求挂起时,小心不要重用它。同时,确保在不再需要SqlConnection
实例时将其释放。否则,您可能会遇到连接泄漏和连接池饥饿的问题。 - Theodor Zoulias