亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何異步使用HttpWebRequest(.NET)?

如何異步使用HttpWebRequest(.NET)?

森林海 2019-07-09 10:32:49
如何異步使用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()從這個功能。


查看完整回答
反對 回復 2019-07-09
?
慕慕森

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;}

問候


查看完整回答
反對 回復 2019-07-09
?
弒天下

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);});


查看完整回答
反對 回復 2019-07-09
  • 3 回答
  • 0 關注
  • 1660 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號