Với đoạn mã sau, tôi có một số câu hỏi về thực hành tốt nhất:Thực hành tốt nhất để điền vào một DataSet hoặc DataTable không đồng bộ trong ASP.NET là gì?
string connectionString = @"Server=(local)\sqlexpress; Database=master; Integrated Security=true;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlDataAdapter dataAdapter = new SqlDataAdapter("select * from information_schema.columns", connection))
{
await connection.OpenAsync();
DataTable dataTable = new DataTable();
await Task.Run(() => dataAdapter.Fill(dataTable));
return dataTable;
}
}
Tôi đã nhìn thấy một số ví dụ mà bọc toàn bộ khối mã trong một Task.Run() cuộc gọi, nhưng tôi không chắc chắn nếu đó là tốt hơn so với gọi Task.Run() chỉ cho các DataAdapter.Fill() phương pháp, mà cảm thấy linh hoạt hơn và cụ thể (chỉ sử dụng đang chờ đợi trên các nhiệm vụ async).
Cách tiếp cận gọi Task.Run() trên phương thức Fill() có tốt hơn là gói toàn bộ khối mã không?
Có bất kỳ tác dụng phụ tiêu cực nào để gọi Fill() trong Task.Run() không? Tôi đang suy nghĩ về một cái gì đó dọc theo dòng mất cuộc gọi ngăn xếp và/hoặc thông tin ngoại lệ nếu Fill() có một lỗi.
Có cách nào tốt hơn để viết điều này trong ASP.NET không?
Tại sao không đặt * tất cả * của mã đó bên trong một phương thức không đồng bộ? Tức là, di chuyển Nhiệm vụ để bao gồm toàn bộ vòng đời kết nối SQL bao gồm điền vào DataTable. – user2864740
Đây có phải là ASP.NET hoặc GUI không? – usr
@usr, tôi đã giả sử ASP.NET; Có sự khác biệt lớn ở đây không? –