我在SQL Server中创建一个测试表,如下:
CREATE TABLE Person
(
PersonID INT NOT NULL IDENTITY,
PersonName NCHAR(500) NOT NULL,
PersonFamily NCHAR(500) NOT NULL,
CONSTRAINT PK_Person PRIMARY KEY(PersonID)
)
接着我创建了两个测试异步的方法。
第一个方法使用异步的方式读取所有人员信息,而第二个方法则使用同步的方式。
异步方法:
private async Task<List<Person>> ReadPersonsAsync()
{
List<Person> result = new List<Person>();
using (SqlConnection sqlConnection = new SqlConnection(ConnectionString))
{
using (SqlCommand sqlCommand = new SqlCommand())
{
sqlCommand.CommandText = "SELECT * FROM Person";
sqlCommand.CommandType = System.Data.CommandType.Text;
sqlCommand.Connection = sqlConnection;
await sqlConnection.OpenAsync();
using (var reader = await sqlCommand.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
result.Add(new Person
{
ID = int.Parse(reader[0].ToString()),
Name = reader[1].ToString(),
Family = reader[2].ToString()
});
}
}
}
}
return result;
}
同步方法:
private List<Person> ReadPersons()
{
List<Person> result = new List<Person>();
using (SqlConnection sqlConnection = new SqlConnection(ConnectionString))
{
using (SqlCommand sqlCommand = new SqlCommand())
{
sqlCommand.CommandText = "SELECT * FROM Person";
sqlCommand.CommandType = System.Data.CommandType.Text;
sqlCommand.Connection = sqlConnection;
sqlConnection.Open();
using (var reader = sqlCommand.ExecuteReader())
{
while (reader.Read())
{
result.Add(new Person
{
ID = int.Parse(reader[0].ToString()),
Name = reader[1].ToString(),
Family = reader[2].ToString()
});
}
}
}
}
return result;
}
当我使用异步方法时需要10秒钟,但同步方法只需要2秒钟。
我的代码哪里出了问题?谢谢。