Tôi đang cố thực thi nhiều SqlDataReaders bằng Task.WhenAll. Nhưng khi nhiệm vụ được chờ đợi, tôi nhận đượcNhiệm vụ khi tất cả, kết nối đang đóng
"System.InvalidOperationException: Hoạt động không hợp lệ. Kết nối bị đóng".
Creation nhiệm vụ:
List<Task<SqlDataReader>> _listTasksDataReader = new List<Task<SqlDataReader>>();
_listTasksDataReader.Add(GetSqlDataReader1(10));
_listTasksDataReader.Add(GetSqlDataReader2(10));
SqlDataReader[] _dataReaders = await Task.WhenAll(_listTasksDataReader);
của tôi "SqlDataReader" phương pháp:
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();
}
}
}
nên không kết nối cơ sở dữ liệu được mở ra khi Task.WhenAll được thực hiện hay tôi thiếu một cái gì đó ?
Bạn có hai kết nối. Bạn đang gặp lỗi nào khi kết nối? Tôi sẽ đặt điểm ngắt trên sqlCon.Mở() và xem liệu mã của bạn có đang chạy [hai lần] hay không và các kết nối trong thực tế đang được mở. –
Ngay khi cuộc gọi 'ExecuteReaderAsync' của bạn trả về, kết nối của bạn sẽ bị đóng (như được khai báo bên trong câu lệnh' using'). Cuộc gọi 'ExecuteReaderAsync' của bạn trả về * trước * dữ liệu đã được đọc (tất cả đều là trình đọc không đồng bộ!). –
Kết nối bị đóng vì bạn bước ra khỏi khối sử dụng vì câu lệnh trả về. Bạn nên xem http://codereview.stackexchange.com/a/22916/54013 – AntonR