2013-02-27 3 views
7

を使用して非同期データアクセスI次のコードを持っており、それが経過したミリ秒が不正確であると思われる:測定のC#/ストップウォッチクラス

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

これが正しい見ていますか私は痛いほど明らかに何かが足りないのですか?

+1

それは私にはOKになります。Repository.GetAll方法がうまくいけば、それはそうのような署名を持って、非同期でない場合

潜在的なエラーは次のようになります。なぜあなたはそれが不正確だと結論づけていますか?このテクニックを使用すると、非常に短いタイミングを正確に測定することはできません。 'Stopwatch.Frequency'フィールドをチェックしてください。 –

+0

私にもよく見えます。ちょっとしたテスト(https://dotnetfiddle.net/wLzfor)をして、何らかの理由でasyncがストップウォッチをかわしているかどうかを確認しましたが、そうではありません。 – Jcl

+0

( 'ConfigureAwait(false) 'を使っても動作します) – Jcl

答えて

0

これは完全に大丈夫です。

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

非同期メソッドシグネチャなしではコンパイルできないと思います – Jcl