2011-11-15 117 views
1

我想一個異步請求中獲得的經過時間的經過時間,但我得到了一個時間,這是Wireshark的時候完全不同。獲取異步請求

這真是奇怪,因爲我在做同樣的事情同步請求池,我得到Wireshark的時間。

這是我的代碼:

public void getResponseAsync() 
    { 
     RequestState rs = new RequestState(); 
     rs.Request = this.webRequest; //On ajoute la requete dans l'objet état pour pouvoir le récupérer dans la callback 
     this.timerAsync.Restart(); 
     IAsyncResult ar = rs.Request.BeginGetResponse(new AsyncCallback(this.ResponseCallback), rs);  // Appel asynchrone 
    } 

    public void ResponseCallback(IAsyncResult ar) 
    { 
     RequestState rs = (RequestState)ar.AsyncState; //Récupération de l'objet etat 
     HttpWebRequest req = rs.Request;    //Récupération de la requete web (object HttpWebRequest) 
     try //Récupération de la réponse Web  
     { 
      HttpWebResponse resp = (HttpWebResponse)req.EndGetResponse(ar); 
      this.timerAsync.Stop(); 
      this.timeAsync = this.timerAsync.ElapsedMilliseconds; 
      ... 
      ... 
     } 
    } 

this.timeAsync的值是遠離Wireshark的價值。

我都做什麼了嗎?

感謝您的幫助。

回答

0

你肯定有getResponseAsync只有一個()調用? 在getResponseAsync上添加斷點以確定。

getResponseAsync的多次調用將重置您的計時器。

+0

對於每個請求,我得到一個異步響應,但定時器不重新啓動:'for(int k = 0; k dbaq

+0

您是否在監視與您的getResponseAsync()調用相對應的回調?因爲每個getReponseAsync()都會調用你的ResponseCallback。如果你沒有得到相應的回調,你會得到一個錯誤的時間值。 –

+0

對不起,但我沒有看到這個片段的問題。我試圖把開始時間放在我的RequestState對象中:'rs.start = DateTime.Now;'並且在我的ResponseCallback中: 'RequestState rs =(RequestState)ar.AsyncState; HttpWebRequest req = rs.Request; DateTime start = rs.start; HttpWebResponse resp =(HttpWebResponse)req.EndGetResponse(ar); this.timeAsync = Helpers.getDiffMs(start);' – dbaq