异步编程

 public class RequestState
    {
        const int BUFFER_SIE = 102400;
        public StringBuilder RequestData;
        public byte[] BufferRead;
        public HttpWebRequest Request;
        public Stream ResponseStream;
        public Decoder StreamDecode = Encoding.UTF8.GetDecoder();
        public RequestState()
        {
            BufferRead = new byte[BUFFER_SIE];
            RequestData = new StringBuilder("");
            Request = null;
            ResponseStream = null;
        }
    }
    public class ClientGetAsync
    {
        public static ManualResetEvent allDone = new ManualResetEvent(false);
        const int BUFFER_SIE=102400;
        public static void Main(string[] args)
        {
            if (args.Length < 1)
            {
                showUsage();
               // return;
            }
            Uri HttpSite = new Uri(" http://www.baidu.com");
            HttpWebRequest wreq = (HttpWebRequest)WebRequest.Create(HttpSite);
            RequestState rs = new RequestState();
            rs.Request = wreq;
            IAsyncResult r = (IAsyncResult)wreq.BeginGetResponse(new AsyncCallback(RespCallback),rs);
            allDone.WaitOne();
            Console.ReadKey();
            Console.ReadLine();
        }
        public static void showUsage()
        {
            Console.WriteLine("Try get a URL");
            Console.WriteLine("\r\n usage::");
            Console.WriteLine("ClientGetAsync URL");
            Console.WriteLine("Case::");
            Console.WriteLine("ClientGetAsync http://www.microsoft.com/net/");
        }
        private static void RespCallback(IAsyncResult ar)
        {
            RequestState rs = (RequestState)ar.AsyncState;
            HttpWebRequest req = rs.Request;
            Thread.Sleep(5000);
            HttpWebResponse resp = (HttpWebResponse)req.EndGetResponse(ar);
            Stream ResponseStream = resp.GetResponseStream();
            rs.ResponseStream = ResponseStream;
            IAsyncResult iarRead = ResponseStream.BeginRead(rs.BufferRead, 0, BUFFER_SIE, new AsyncCallback(ReadCallBack), rs);
        }
        private static void ReadCallBack(IAsyncResult asyncResult)
        {
            RequestState rs = (RequestState)asyncResult.AsyncState;
            Stream responseStream = rs.ResponseStream;
            int read = responseStream.EndRead(asyncResult);
            if (read > 0)
            {
                char[] charBuffer = new Char[BUFFER_SIE];
                int len = rs.StreamDecode.GetChars(rs.BufferRead, 0, read, charBuffer, 0);
                String str = new String(charBuffer, 0, len);
                rs.RequestData.Append(str);
                IAsyncResult ar = responseStream.BeginRead(rs.BufferRead, 0, BUFFER_SIE, new AsyncCallback(ReadCallBack), rs);
            }
            else
            {
                if (rs.RequestData.Length > 1)
                {
                    string strContent;
                    strContent = rs.RequestData.ToString();
                    Console.WriteLine(strContent);
                }
                responseStream.Close();
                allDone.Set();
            }
            return;
        }
    }
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值