Adr*_*ila 12 c# ado.net asynchronous dataadapter
鉴于以下代码,我有一些关于最佳实践的问题:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经看到几个示例在Task.Run()调用中包装整个代码块,但我不确定这是否比仅为DataAdapter.Fill()方法调用Task.Run()更好更灵活和特定(仅使用等待异步任务).
在Fill()方法上调用Task.Run()的方法比包装整个代码块更好吗?
在Task.Run()中调用Fill()有任何负面的副作用吗?如果Fill()有错误,我正在考虑丢失调用堆栈和/或异常信息的问题.
有没有更好的方法在ASP.NET中编写它?
在 ASP.NET 中,使用Task.Run. 它具体会改善什么?它只会引入开销。
也就是说,Fill将执行 IO(耗尽数据读取器),因此您可能希望异步调用它。不幸的是,此方法没有异步版本。
如果您坚持使用异步 IO(这对于数据库访问来说是有问题的),您需要找到替代方案。也许异步实体框架或原始 ADO.NET 可以帮助您。
| 归档时间: |
|
| 查看次数: |
8365 次 |
| 最近记录: |