我想使用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當數據庫連接打開還是我失去了一些東西?
你有兩個連接。你在哪個連接上發生錯誤? 我會在sqlCon上設置一個斷點。打開()並查看您的代碼是否正在運行[兩次],並且連接實際上正在打開。 –
只要您的'ExecuteReaderAsync'調用返回,您的連接就會關閉(因爲它在'using'語句中聲明)。您的'ExecuteReaderAsync'調用在*數據讀取之前返回*(畢竟它是一個異步讀取器!)。 –
由於返回語句而退出使用塊,因此連接關閉。你應該看看http://codereview.stackexchange.com/a/22916/54013 – AntonR