2013-07-10 66 views
0

我使用任務發送Httprequests並捕獲它們的響應。在我的代碼,我想知道的是什麼(HttpWebResponse)t.Result和HttpWebResponse響應之間的真正的改變=(HttpWebResponse)myReq.GetResponse
下面是實際的代碼:Task.Result和請求響應之間的區別

public void pageCheck(WebSite webParam){ 
    //SomeCode omitted 
    HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(uri); 
    HttpWebResponse response = null; 

    try{ 
     Task<WebResponse> task = Task<WebResponse>.Factory.FromAsync(
     myReq.BeginGetResponse,myReq.EndGetResponse,null); 

     task.ContinueWith(t => 
      { 
       //some code omitted 
       var responseCode = (HttpWebResponse) t.Result; 

       //do some things with response code 
       response = (HttpWebResponse)myReq.GetResponse(); 
       //other code omitted 
      }); 
    } 
} 

回答

2

GetResponse的執行請求並返回t.Result結果不執行任何操作。它只包含使用BeginGetResponse/EndGetResponse進行異步調用的結果。

如果原始操作尚未完成,t.Result將實際阻塞,直到結果可用。在你的情況下,只有在由FromAsync創建的異步調用完成後,纔會執行此操作,因爲ContinueWith只會執行。

因爲您的代碼執行兩次請求,一次調用FromAsync,另一次調用GetResponse。

相關問題