我正在尝试使用Task.WhenAll执行多个SqlDataReaders,但是当等待任务时,我会收到“System.InvalidOperationException:无效操作。连接已关闭”的错误信息。
任务的创建:
List<Task<SqlDataReader>> _listTasksDataReader = new List<Task<SqlDataReader>>();
_listTasksDataReader.Add(GetSqlDataReader1(10));
_listTasksDataReader.Add(GetSqlDataReader2(10));
SqlDataReader[] _dataReaders = await Task.WhenAll(_listTasksDataReader);
我的"SqlDataReader"方法:
public Task<SqlDataReader> GetSqlDataReader1(int recordCount)
{
using (var sqlCon = new SqlConnection(ConnectionString))
{
sqlCon.Open();
using (var command = new SqlCommand("sp_GetData", sqlCon))
{
command.Parameters.Clear();
command.Parameters.Add(new SqlParameter("@recordCount", recordCount));
command.CommandType = System.Data.CommandType.StoredProcedure;
return command.ExecuteReaderAsync();
}
}
}
当执行Task.WhenAll时,数据库连接应该被打开,还是我遗漏了什么?
ExecuteReaderAsync
调用返回,您的连接将关闭(因为它声明在using
语句中)。 您的ExecuteReaderAsync
调用在数据被读取之前就已经返回了(毕竟它是一个异步读取器!)。 - RB.