我TcpListener上课,我正在async/await阅读和写作.
对于这个服务器,我创建了单个数据库实例,我准备了所有数据库查询.
但是对于一个以上,TcpClient我一直在例外:
MySql.Data.MySqlClient.MySqlException发生了类型的异常,MySql.Data.dll但未在用户代码中处理附加信息:已经有一个
DataReader与此相关的开放Connection,必须先关闭.
如果我理解正确的话,那么一次数据库查询就不会超过一个async客户端.
所以我只是在我的查询中添加了锁,这样一切似乎都很好.
// One MySqlConnection instance for whole program.
lock (thisLock)
{
var cmd = connection.CreateCommand();
cmd.CommandText = "SELECT Count(*) FROM logins WHERE username = @user AND password = @pass";
cmd.Parameters.AddWithValue("@user", username);
cmd.Parameters.AddWithValue("@pass", password);
var count = int.Parse(cmd.ExecuteScalar().ToString());
return count > 0;
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用这个方法为每个查询创建新连接,如SO社区的某个人所提到的,但这个方法比锁慢得多:
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open(); // This takes +- 35ms and makes worse …Run Code Online (Sandbox Code Playgroud)