我正在使用任务发送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
});
}
}
答案 0 :(得分:2)
GetResponse执行请求并返回结果,而t.Result不执行任何操作。它只包含使用BeginGetResponse / EndGetResponse的异步调用的结果。
如果原始操作尚未完成,则t.Result将实际阻塞,直到结果可用。在您的情况下,这不会发生,因为只有在FromAsync创建的异步调用完成后,ContinueWith才会执行。
原样,您的代码执行请求两次,一次是在您调用FromAsync时,另一次是在您调用GetResponse时。