有两个问题(注释里有提到),
1. 是否这样使用多线程??
2. req.GetResponse();//执行到这里时说ThreadPool 对象中没有足够的自由线程来完成操作??请大家帮帮忙class AA{
const int MAX_THREADS = 200;
private Thread[] myThreads = new Thread[MAX_THREADS];void aa(){
for (int i=0; i<MAX_THREADS; i++)
{
myThreads[i] = new Thread(new ThreadStart(this.run));
myThreads[i].Name = i.ToString();
myThreads[i].Start();//是否这样使用多线程??
}
}private void run()
{
bool bRunning = true;
while (bRunning)
{
try
{
WebProxy proxyObj = new WebProxy(adRef[curCount--].strProxy,true);//curCount是全局变量.
WebRequest req = WebRequest.Create(strUri);
WebResponse resp = req.GetResponse();//执行到这里时说ThreadPool 对象中没有足够的自由线程来完成操作??
resp.Close();
}
catch(){...} if (curCount<0) bRunning = false;
}
}
}
1. 是否这样使用多线程??
2. req.GetResponse();//执行到这里时说ThreadPool 对象中没有足够的自由线程来完成操作??请大家帮帮忙class AA{
const int MAX_THREADS = 200;
private Thread[] myThreads = new Thread[MAX_THREADS];void aa(){
for (int i=0; i<MAX_THREADS; i++)
{
myThreads[i] = new Thread(new ThreadStart(this.run));
myThreads[i].Name = i.ToString();
myThreads[i].Start();//是否这样使用多线程??
}
}private void run()
{
bool bRunning = true;
while (bRunning)
{
try
{
WebProxy proxyObj = new WebProxy(adRef[curCount--].strProxy,true);//curCount是全局变量.
WebRequest req = WebRequest.Create(strUri);
WebResponse resp = req.GetResponse();//执行到这里时说ThreadPool 对象中没有足够的自由线程来完成操作??
resp.Close();
}
catch(){...} if (curCount<0) bRunning = false;
}
}
}
比如有400个任务(也就是curCount=400), 用200个线程来执行,出现"没有足够线程完成操作"好像是第201次执行时出现,但如果将
WebResponse resp = req.GetResponse();
resp.Close();
这两句注释掉就没出错,为什么呢??
第一次接触多线程,不懂啊,请大家帮帮忙吧
而默认的threadpool显然不能提供这么多的可用线程,因为每一个getresponse执行过程都会锁定资源,可能会造成死锁而导致线程无法返回也是原因之一.