假设 C# 5.0,我会做这样的事情如下:
// A method to get your intensive dataset
public async Task<IntensiveDataSet> GetIntensiveDataSet() {
//in here you'll want to use any of the newer await Async calls you find
// available for your operations. This prevents thread blocking.
var intensiveDataSet = new IntensiveData();
using (var sqlCommand = new SqlCommand(SqlStatement, sqlConnection))
{
using (var sqlDataReader = await sqlCommand.ExecuteReaderAsync())
{
while (await sqlDataReader.ReadAsync())
{
//build out your intensive data set.
}
}
}
return intensiveDataSet;
}
// Then in your controller, some method that uses that:
public async Task<JsonResult> Intense() {
return Json(await GetIntensiveDataSet());
}
在您的 JS 中,您可以这样称呼它(使用 JQuery):
$.get('/ControllerName/Intense').success(function(data) {
console.log(data);
});
老实说,我只是在它运行时展示某种微调器。
如果您确实需要向用户提供某种反馈,则必须在整个异步调用期间对用户的 Session 进行更新......并且为了做到这一点,您需要传递对该 Session 的引用。然后,您只需添加另一个简单的 JsonResult 操作,该操作检查 Session 变量中的消息并使用 JQuery 定期轮询它。不过好像有点矫枉过正。在大多数情况下,简单的“这可能需要一段时间”对人们来说就足够了。