.net 4.0 任务结果和请求响应之间的差异

.net 4.0 任务结果和请求响应之间的差异,.net-4.0,parallel-processing,task-parallel-library,task,.net 4.0,Parallel Processing,Task Parallel Library,Task,我使用任务发送httprequest并捕获它们的响应。在我的代码中,我想知道(HttpWebResponse)t.Result和HttpWebResponse=(HttpWebResponse)myReq.GetResponse 以下是实际代码: public void pageCheck(WebSite webParam){ //SomeCode omitted HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(u

我使用任务发送httprequest并捕获它们的响应。在我的代码中,我想知道(HttpWebResponse)t.Result和HttpWebResponse=(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
            });
     }
}
公共无效页面检查(网站网页RAM){
//省略了一些代码
HttpWebRequest myReq=(HttpWebRequest)WebRequest.Create(uri);
HttpWebResponse响应=null;
试一试{
Task Task=Task.Factory.fromsync(
myReq.BeginGetResponse,myReq.EndGetResponse,null);
task.ContinueWith(t=>
{
//省略了一些代码
var responseCode=(HttpWebResponse)t.结果;
//用响应代码做一些事情
response=(HttpWebResponse)myReq.GetResponse();
//省略其他代码
});
}
}

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

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

按原样,代码执行请求两次,一次是在调用fromsync时,另一次是在调用GetResponse时