日期:2014-05-17  浏览次数:20661 次

异步回调中线程的问题
有一个流程:非主线程发httpwebrequest,在其异步回调中,通过代理通知已拿到response,想在代理方法中继续发请求,然后回调里继续通知,代理继续发请求。。。这样一直做会不会就产生N多线程,导致我主线程无法停止这个流程。
其实想做的就是一个接一个(前一个结束后一个发)的发请求,并且主线程可以控制流程的启动和停止。
本人愚钝,想了很久没想到好的解决办法,望高人点拨一二。
多线程 HttpWebRequest

------解决方案--------------------
1.异步编程不是通过多线程实现的,所以你不用担心会产生很多线程
2.就算每次异步请求会产生一个线程,那么你进行下一次异步请求之后,原来的线程肯定会执行结束
3.加一个标志,作为结束标志,以Socket.BeginAccept为例:
  
  socket.BeginAccept(...,new AsyncCallBack(OnAccept),...);
  private void OnAccept(IAsyncResult ar)
  {
       Socket newClient = socket.EndAccept(ar);
       if(flag) //继续侦听
       {
            socket.BeginAccept(...,new AsyncCallBack(OnAccept),...);
       }
       //否则 侦听过程结束
  }

4.可以把异步看做多线程,但内部主要不是通过多线程实现的。也就是说,你BeginAccept 100次,不一定有100个线程产生,没有一对一的关系