考虑下面的代码,我对最佳实践的一些问题:在ASP.NET中异步填充DataSet或DataTable的最佳实践是什么?
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中?
为什么不把所有的代码放在一个异步方法中?也就是说,移动任务以包含整个SQL连接生命周期,包括填充DataTable。 – user2864740 2014-08-28 22:04:49
这是ASP.NET还是GUI? – usr 2014-08-28 22:14:28
@usr,我假设ASP.NET;这里有很大的区别吗? – 2014-08-29 01:14:16