2013-02-27 9 views
7

Mam następujący kod i wydaje się, że są niedokładne Upływający milisekund:Pomiar C#/asynchroniczny dostęp do danych Korzystanie stoper Class

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

Czy to wygląda prawidłowa albo ja czegoś brakuje boleśnie oczywiste?

+1

wygląda OK, aby mnie. Dlaczego wniosek jest niedokładny? FYI, bardzo krótkie czasy nie mogą być dokładnie zmierzone za pomocą tej techniki; sprawdź pole 'Stopwatch.Frequency'. –

+0

Wygląda też dobrze dla mnie. Po prostu wykonałem mały test (https://dotnetfiddle.net/wLzfor), aby sprawdzić, czy asynchronizuje się ze stoperem z jakiegoś powodu, ale tak się nie dzieje. – Jcl

+0

(działa nawet przy użyciu 'ConfigureAwait (false)') – Jcl

Odpowiedz

0

to wygląda mi doskonale.

Potencjalny błąd byłoby, gdyby metoda Repository.GetAll nie jest asynchroniczny, z nadzieją, że ma podpis tak:

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

Nie sądzę, że byłoby skompilować bez podpisu metody asynchronicznej – Jcl

Powiązane problemy