Task.Result和Request响应之间的区别

时间:2013-07-10 12:47:41

标签: .net-4.0 parallel-processing task-parallel-library task

我正在使用任务发送Httprequests并捕获他们的响应。在我的代码中我想知道(HttpWebResponse)t.Result与HttpWebResponse response =(HttpWebResponse)之间的真正区别myReq.GetResponse
这是实际的代码:

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

1 个答案:

答案 0 :(得分:2)

GetResponse执行请求并返回结果,而t.Result不执行任何操作。它只包含使用BeginGetResponse / EndGetResponse的异步调用的结果。

如果原始操作尚未完成,则t.Result将实际阻塞,直到结果可用。在您的情况下,这不会发生,因为只有在FromAsync创建的异步调用完成后,ContinueWith才会执行。

原样,您的代码执行请求两次,一次是在您调用FromAsync时,另一次是在您调用GetResponse时。