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 変数内のメッセージをチェックし、一定間隔で JQuery を使用してポーリングする単純な JsonResult アクションをもう 1 つ追加するだけです。やり過ぎのようですが。ほとんどの場合、単純な「これには時間がかかる場合があります」で十分です。