我刚刚尝试使我的ASP.NET MVC应用程序的部分异步执行,但即使我已经阅读并尝试了很多方法,我仍然不太理解async-await模式,并希望有人能给我一些提示。
基本上我有以下内容:
A javascript call to my controller which fetches a partial View for a chart (this happens several times after page load for a lot of charts)
// Load content of one chart my.loadChartContent = function (data, callback) { $.post("/Dashboard/GetChartContent/", data, function (datain) { if (isFunction(callback)) callback(datain); }); };
A controller action which calls a database method in another class
public ActionResult GetChartContent(int id, bool isDraft = false) { //do something //... var chartdata = _dataService.GetDataForChart(chart, isDraft, _user.Id); //long running query //do something with chartdata return View(chartdata); }
The data class (_dataService) which fetches the data from the database with a SqlDataReader and loads a DataTable with that data.
在哪里应该使用async-await?仅对控制器操作使用它是否足够,还是必须使整个“调用链”异步?
更新:当我使用SQLConnection.OpenAsync和ExecuteReaderAsync时,代码永远无法完成...我不知道原因是什么?
public async Task<Query> GetSqlServerData(Query query)
{
var dt = new DataTable();
var con = new SqlConnection(query.ConnectionString);
await con.OpenAsync();
var cmd = new SqlCommand(query.SelectStatement, con);
var datareader = await cmd.ExecuteReaderAsync();
dt.Load(datareader);
con.Close();
query.Result = dt;
return query;
}
SqlDataReader
中的BeginExecuteReader
和ReadAsync
)。http://blogs.microsoft.co.il/blogs/bnaya/archive/2012/01/15/using-async-await.aspx - Ahmed KRAIEM