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 は結果が得られるまで実際にブロックされます。あなたの場合、 FromAsync によって作成された非同期呼び出しが終了した後にのみ ContinueWith が実行されるため、これは発生しません。

そのままでは、コードは要求を 2 回実行します。1 回は FromAsync を呼び出すとき、もう 1 回は GetResponse を呼び出すときです。

于 2013-07-10T12:56:41.043 に答える