鉴于以下代码,我有几个关于最佳实践的问题:
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;
}
}
我见过几个将整个代码块包装在 Task.Run() 调用中的示例,但我不确定这是否比仅针对 DataAdapter.Fill() 方法调用 Task.Run() 更好,感觉更灵活和具体(仅在异步任务上使用 await)。
在 Fill() 方法上调用 Task.Run() 的方法是否比包装整个代码块更好?
在 Task.Run() 中调用 Fill() 是否有任何负面影响?如果 Fill() 出现错误,我正在考虑丢失调用堆栈和/或异常信息的问题。
有没有更好的方法在 ASP.NET 中编写它?
最佳答案
在 ASP.NET 中,使用 Task.Run
几乎无济于事。它究竟会改善什么?它只会引入开销。
也就是说,Fill
将执行 IO(耗尽数据读取器),因此您可能想要异步调用它。遗憾的是,此方法没有异步版本。
如果您坚持使用异步 IO (which is questionable for database access),您需要寻找替代方案。也许异步 Entity Framework 或原始 ADO.NET 可以帮助您。
关于c# - 在 ASP.NET 中异步填充数据集或数据表的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25558715/