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

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

慕慕森
TA貢獻1856條經(jīng)驗 獲得超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條經(jīng)驗 獲得超8個贊
BeginGetResponse()
在此方法成為異步之前,BeginGetResponse方法需要完成一些同步設(shè)置任務(wù)(例如DNS解析、代理檢測和TCP套接字連接)。因此,不應(yīng)在用戶界面(UI)線程上調(diào)用此方法,因為在引發(fā)錯誤或該方法成功之前,可能需要相當(dāng)長的時間(取決于網(wǎng)絡(luò)設(shè)置)來完成初始的同步設(shè)置任務(wù)。
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 關(guān)注
- 1657 瀏覽
添加回答
舉報
0/150
提交
取消