0

我正在使用任务发送 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
            });
     }
}
4

1 回答 1

2

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

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

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

于 2013-07-10T12:56:41.043 回答