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

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

如何异步使用HttpWebRequest(.NET,C#)?



森林海
浏览 1581回答 3
3回答

莫回无

使用HttpWebRequest.BeginGetResponse()HttpWebRequest webRequest;void StartWebRequest(){     webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), null);}void FinishWebRequest(IAsyncResult result){     webRequest.EndGetResponse(result);}异步操作完成后调用回调函数。你至少得打个电话EndGetResponse()从这个功能。

慕慕森

考虑到答案: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;}问候

弑天下

到目前为止,每个人都错了,因为BeginGetResponse()在当前线程上做一些工作。从文献资料:在此方法成为异步之前,BeginGetResponse方法需要完成一些同步设置任务(例如DNS解析、代理检测和TCP套接字连接)。因此,不应在用户界面(UI)线程上调用此方法,因为在引发错误或该方法成功之前,可能需要相当长的时间(取决于网络设置)来完成初始的同步设置任务。因此,要正确地做到这一点:void&nbsp;DoWithResponse(HttpWebRequest&nbsp;request,&nbsp;Action<HttpWebResponse>&nbsp;responseAction){ &nbsp;&nbsp;&nbsp;&nbsp;Action&nbsp;wrapperAction&nbsp;=&nbsp;()&nbsp;=> &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.BeginGetResponse(new&nbsp;AsyncCallback((iar)&nbsp;=> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;response&nbsp;=&nbsp;(HttpWebResponse)((HttpWebRequest)iar.AsyncState).EndGetResponse(iar); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;responseAction(response); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}),&nbsp;request); &nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;wrapperAction.BeginInvoke(new&nbsp;AsyncCallback((iar)&nbsp;=> &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;action&nbsp;=&nbsp;(Action)iar.AsyncState; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;action.EndInvoke(iar); &nbsp;&nbsp;&nbsp;&nbsp;}),&nbsp;wrapperAction);}然后,您可以对响应进行所需的操作。例如:HttpWebRequest&nbsp;request;//&nbsp;init&nbsp;your&nbsp;request...then:DoWithResponse(request,&nbsp;(response)&nbsp;=>&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;body&nbsp;=&nbsp;new&nbsp;StreamReader(response.GetResponseStream()).ReadToEnd(); &nbsp;&nbsp;&nbsp;&nbsp;Console.Write(body);});
打开App,查看更多内容
随时随地看视频慕课网APP