我有一个 Index
ASP.net MVC控制器中的动作。此操作调用(除其他外)一个私有操作,该操作对具有大量行集的SQL表进行计数。返回的号码将插入视图包属性中。
public ActionResult Index()
{
// do things
ViewBag.NumberOfRows = NumberOfRows();
return View();
}
private string NumberOfRows()
{
// sql connection and row count
return numberOfRows;
}
这有效,但直到我看不到索引页面 一切 执行,甚至行数。
相反,我会 Index
立即完成的行动,即使私人功能尚未完成。比计数完成时,为视图包属性设置一个值。
现在我已经这样做了:
private async Task<string> NumberOfRows()
{
SqlConnection connection = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;
cmd.CommandText = "SELECT SUM (row_count) FROM sys.dm_db_partition_stats WHERE object_id=OBJECT_ID('aTable') AND (index_id=0 or index_id=1)";
cmd.CommandType = CommandType.Text;
cmd.Connection = connection;
await connection.OpenAsync();
reader = await cmd.ExecuteReaderAsync();
string numberOfRows = "N/A";
while (await reader.ReadAsync())
{
numberOfRows = reader.GetInt64(0).ToString();
}
connection.Close();
return numberOfRows ;
}
public async Task<ActionResult> Index(FormCollection form){
// do things;
ViewBag.NumberOfRows = await NumberOfRows();
return View();
}
这很有效。但这真的是异步吗?我想念一下,还有其他办法吗?