当前位置:编程学习 > C#/ASP.NET >>

关于HttpWebRequest异步调用的问题。

下面代码没有如期那样进行异步调用,不知道哪出了问题,请大神们指教,谢谢!

void BeginGetResponse(string url,AsyncCallback callBack){
    HttpWebRequest req=WebRequest.Create(url) as HttpWebRequest;
    req.Method=GET;
    req.BeginGetResponse(callBack,req);
}
void OnResponse(IAsyncResult result){
   HttpWebRequest req=result.AsyncState as HttpWebRequest;
   HttpWebResponse resp=req.EndGetResponse(result) as HttpWebResponse;
}
//按钮事件
void Button1Click(object sender, EventArgs e){
    string url="http://bbs.egou.com/forumdisplay.php?fid=19&page=2";
    BeginGetResponse(url,new AsyncCallback(OnResponse));
}
--------------------编程问答-------------------- 有人可以帮下小生吗? --------------------编程问答-------------------- 奇怪,我如下调用,当第一个的时候会线程阻塞,后面的就不会了,这乍回事呢?

void Button1Click(object sender, EventArgs e){
    string url="http://bbs.egou.com/forumdisplay.php?fid=19&page=2";
    for(int i=0;i<10;i++){
        BeginGetResponse(url,new AsyncCallback(OnResponse));
    }
}
--------------------编程问答-------------------- 帮帮忙哦,大神们! --------------------编程问答--------------------

/// <summary>
        /// 异步调用函数
        /// </summary>
        /// <param name="iar"></param>
        private static void f_processHttpResponseAsync(IAsyncResult iar)
        {
            var rsb = new StringBuilder();
            var encoding = Encoding.UTF8;
            var request = iar.AsyncState as HttpWebRequest;
            // 接收返回的页面
            var response = request.EndGetResponse(iar) as HttpWebResponse;
            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new System.Exception(response.StatusCode + ":HttpStatus异常:" +
                    response.StatusDescription);
            }
            var responseStream = response.GetResponseStream();
            //Encoding.UTF8
            using (var reader = new System.IO.StreamReader(responseStream, encoding))
            {
                var read = new Char[mByteLen];
                var count = reader.Read(read, 0, mByteLen);
                while (count > 0)
                {
                    var str = new string(read, 0, count);
                    rsb.Append(str);
                    count = reader.Read(read, 0, mByteLen);
                }
                reader.Close();
                reader.Dispose();
                responseStream.Dispose();
                responseStream.Close();
                response.Close();
            }
            //Console替换为页面呈现容器即可
            Console.WriteLine(rsb.ToString());
            Console.ReadLine();
            /*
            异步调用例子
            IAsyncResult result = request.BeginGetResponse(new AsyncCallback(f_processHttpResponseAsync), request);
            //处理超时请求
            ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, 
            new WaitOrTimerCallback(f_asyncTimeout), request, 1000 * 60 * 10, true);
            */
        }

--------------------编程问答-------------------- req.Method=GET;


GET是什么? --------------------编程问答--------------------
引用 2 楼 ioriliao17 的回复:
奇怪,我如下调用,当第一个的时候会线程阻塞,后面的就不会了,这乍回事呢?

C# code

void Button1Click(object sender, EventArgs e){
    string url="http://bbs.egou.com/forumdisplay.php?fid=19&page=2";
    for(int i=0;i<10;i++){
……


大概应该是对方网站的问题。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 2 楼 ioriliao17 的回复:
奇怪,我如下调用,当第一个的时候会线程阻塞,后面的就不会了,这乍回事呢?
C# code

void Button1Click(object sender, EventArgs e){
    string url="http://bbs.egou.com/forumdisplay.php?fid=19&page=2";
    for(int i=0;i<10;i++){
    ……

http://bbs.egou.com/forumdisplay.php?fid=19&page=2  这个页面有问题吧    你的程序问题不大
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,