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

多线程下 HttpWebRequest 控制
有10个线程进行100个httpWebRequest任务
还有一个ADSL重连计数变量httpWebRequest任务完成一个计数变量+1
计数变量到20后重新连接ADSL然后归0.(这个搞不懂的不用管)


现在问题是10线程并发,如线程5执行的时候计数器到20了然后进行ADSL断开再连接同时其余9个线程大部分执行httpWebRequest的地方会出错。这个问题如何解决。

重连ADSL的时候其余9个线程暂停?还是什么方法?请指点一下。  本人自学C#概念和意识也不会很好。

------解决方案--------------------
ADSL断开再连接,如果IP换了,那么导致“其余9个线程大部分执行httpWebRequest的地方会出错”是因为IP换了。暂停有什么用,只能让它们重新连接了。
------解决方案--------------------
其实很容易,自己写HttpWebRequest就行了,无非就是socket write bytes
------解决方案--------------------
引用:
换个问法,如何等待httpwebrequest执行完毕线程5再重连ADSL 继续执行httpwebrequest

那你同步下就是了。设置一个event,每完成一个线程减去1,直到0再重新连接开新线程。
------解决方案--------------------
引用:
引用:其实很容易,自己写HttpWebRequest就行了,无非就是socket write bytes
水平有限,还是用现成的吧。


学习一下HTTP协议对你会很有帮助,花个3,5天就够了,如果你只是简单的请求其实是很容易的,我们不要被封装束缚,那只是简化我们一下工作而已,很多人会用httprequest但完全不能理解http协议也蛮可惜的,看看rfc2612
------解决方案--------------------
他的问题不是webrequest的问题,,是线程控制的问题。。
补充7楼。。。
减1的时候,,因为是多线程,,加个锁。。。
c#下快速实现的是lock


------解决方案--------------------


System.Net.ServicePointManager.DefaultConnectionLimit加大。
比如:

System.Net.ServicePointManager.DefaultConnectionLimit = 65535;

之后要记得关闭连接,不然操作的不好的话, 你的内存就被吃满了。
------解决方案--------------------
其实是你的Connection达到默认上限了…… HttpWebRequest有的时候会因为Connection: Keep-Alive 而造成GC不去回收它,即使不再用了也不会马上被关闭。

所以最好封装一下HttpWebRequest,什么时候Dispose自己说了算。
------解决方案--------------------
当Adsl断网时,你用while等待其它9个线程都执行结束,结束后进行ADsl重连
------解决方案--------------------
引用:
连接数不会到达上限, 我还有另外一个功能一直多线程递归 并发连接随便有好几百个。
 问题主要出现在宽带断开的瞬间, 如何控制线程 等其他线程HttpWebRequest执行完毕在断开然后继续执行。 

没有这么干的基础。

放弃当前的工作,从头开始。
------解决方案--------------------
volatile int loginingThreadCount = 0;//正在登录线程数(登录任务数)

void test()
{
 
while(true)

        loginingThreadCount++;       
        HttpWebRequest部分代码太长 省略。。。。。。
        //宽带重拨后其他线程出错的地方
       loginingThreadCount--;
       //宽带重播部分
                lock (Lock2)
                    {
                        if (replayNumber > 20)
                        {
                            while(loginingThreadCount!=0)