如何異步使用HttpWebRequest(.NET)?如何異步使用HttpWebRequest(.NET,C#)?
3 回答

莫回無
TA貢獻1865條經驗 獲得超7個贊
HttpWebRequest.BeginGetResponse()
HttpWebRequest webRequest;void StartWebRequest(){ webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), null);}void FinishWebRequest(IAsyncResult result){ webRequest.EndGetResponse(result);}
EndGetResponse()

慕慕森
TA貢獻1856條經驗 獲得超17個贊
HttpWebRequest webRequest;void StartWebRequest(){ webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), null);}void FinishWebRequest(IAsyncResult result){ webRequest.EndGetResponse(result);}
void StartWebRequest(){ HttpWebRequest webRequest = ...; webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), webRequest);}void FinishWebRequest(IAsyncResult result){ HttpWebResponse response = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse;}

弒天下
TA貢獻1818條經驗 獲得超8個贊
BeginGetResponse()
在此方法成為異步之前,BeginGetResponse方法需要完成一些同步設置任務(例如DNS解析、代理檢測和TCP套接字連接)。因此,不應在用戶界面(UI)線程上調用此方法,因為在引發錯誤或該方法成功之前,可能需要相當長的時間(取決于網絡設置)來完成初始的同步設置任務。
void DoWithResponse(HttpWebRequest request, Action<HttpWebResponse> responseAction){ Action wrapperAction = () => { request.BeginGetResponse(new AsyncCallback((iar) => { var response = (HttpWebResponse)((HttpWebRequest)iar.AsyncState).EndGetResponse(iar); responseAction(response); }), request); }; wrapperAction.BeginInvoke(new AsyncCallback((iar) => { var action = (Action)iar.AsyncState; action.EndInvoke(iar); }), wrapperAction);}
HttpWebRequest request;// init your request...then:DoWithResponse(request, (response) => { var body = new StreamReader(response.GetResponseStream()).ReadToEnd(); Console.Write(body);});
- 3 回答
- 0 關注
- 1660 瀏覽
添加回答
舉報
0/150
提交
取消