2013-02-27 8 views
7

ho il seguente codice e sembra che il tempo trascorso Millisecondi sono inesatte:misura C#/Async Data Access Utilizzando cronometro Classe

public async Task<ActionResult> Index() 
    { 
     try 
     { 
      var connString = RoleEnvironment.IsEmulated 
           ? ConfigurationManager.ConnectionStrings["Poc"].ConnectionString 
           : ConfigurationManager.ConnectionStrings["PocVm"].ConnectionString; 

      var repository = new AccountRepository(connString); 
      var stopWatch = new Stopwatch(); 
      stopWatch.Start(); 

      var accounts = await repository.GetAll(); 

      stopWatch.Stop(); 
      ViewBag.Accounts = accounts; 
      ViewBag.VmStatus = stopWatch.ElapsedMilliseconds; 
     } 
     catch (Exception e) 
     { 
      blah blah blah... 
     } 


     return View(); 
    } 

Questo sembra corretto o mi sto perdendo qualcosa di dolorosamente ovvio?

+1

sembra ok per me. Perché concludi che è impreciso? Per vostra informazione, i tempi molto brevi non possono essere misurati con precisione usando questa tecnica; controlla il campo 'Cronometro.Frequenza'. –

+0

Anche a me sembra bene. Ho appena fatto un piccolo test (https://dotnetfiddle.net/wLzfor) per vedere se l'asincronia ha suonato il cronometro per qualche motivo, ma non è così. – Jcl

+0

(funziona anche usando 'ConfigureAwait (false)') – Jcl

risposta

0

questo mi sembra perfettamente a posto.

Un errore di potenziale sarebbe se il metodo non è Repository.GetAll ASYNC, si spera che ha una firma in questo modo:

public async Task<IEnumerable<Account>> GetAll(); 
+1

Non penso che sarebbe compilato senza una firma del metodo asincrono – Jcl