async / await dans l'action du contrôleur MVC

J'ai un Index action en ASP.net MVC contrôleur. Cette action, les appels téléphoniques (entre autres choses) une action privée ne compter sur une table SQL avec un grand nombre de lignes. Le nombre retourné sera inséré dans une vue sac de la propriété.

public ActionResult Index() 
{
    //do things
    ViewBag.NumberOfRows = NumberOfRows();
    return View();
}

private string NumberOfRows()
{
    //sql connection and row count
    return numberOfRows;
}

Cela fonctionne, mais je ne peux pas voir la page de l'Index jusqu'à ce que tout est exécuté, de même que le nombre de lignes.
Je voudrais, au lieu de cela, Index action à effectuer immédiatement, même si la fonction privée n'a pas encore été terminé. Que lorsque le comte a été terminé de définir une valeur à la vue du sac de la propriété.
Pour l'instant j'ai fait ceci:

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();
}

Cela fonctionne. Mais est-ce vraiment asynchrone? Suis-je raté quelque chose, il y a d'autres façon de faire cela?

source d'informationauteur BAD_SEED