首页 新闻 会员 周边 捐助

关于HttpWebRequest 多线程死锁问题

0
悬赏园豆:50 [已解决问题] 解决于 2010-03-27 22:00

 

问题代码在下面,其中包括两个问题。

第一个问题:我用HttpWebRequest来做针对同一地址开启5个线程来同时请求数据,为什么只有两个线程在工作?

 

第二个问题:如果我去掉了using(FileStream fs= ...)这个包含块所有的线程就都不工作了这是什么原因?

 

代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
using System.Threading;

namespace ConsoleApplication9
{
class Program
{
static void Main(string[] args)
{
Thread[] ts
= new Thread[5];
for (int i = 0; i < ts.Length; i++)
{
ts[i]
= new Thread(new ThreadStart(down));
ts[i].Name
= "线程 " + i.ToString();
ts[i].Start();

}
}

//第一个问题用到的代码
static int ran = 0;
static void down()
{
using (FileStream fs = new FileStream(Thread.CurrentThread.Name, FileMode.Create))
{
string url = "http://im.baidu.com/download/down.php?a=more";
HttpWebRequest req
= WebRequest.Create(url) as HttpWebRequest;
//req.AddRange(ran, ran + 1024 * 1024 * 10);
Stream stream = req.GetResponse().GetResponseStream();
byte[] buffer = new byte[256];
int i = stream.Read(buffer, 0, 256);
while (i > 0)
{
i
= stream.Read(buffer, 0, 256);
Console.WriteLine(Thread.CurrentThread.Name);
fs.Write(buffer,
0, i);
Thread.Sleep(
500);
}
}
}



////第二个问题用到的代码
//static int ran = 0;
//static void down()
//{
// string url = "http://im.baidu.com/download/down.php?a=more"";
// HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
// req.AddRange(1, 500000);
// Stream stream = req.GetResponse().GetResponseStream();
// byte[] buffer = new byte[256];
// int i = stream.Read(buffer, 0, 256);
// while (i > 0)
// {
// i = stream.Read(buffer, 0, 256);
// }
//}
}
}

 

 

一個魜D.蓝的主页 一個魜D.蓝 | 初学一级 | 园豆:40
提问于:2010-03-27 20:31
< >
分享
最佳答案
0

限制是只用两个的,到ie7都是两个,这个是默认限制:

修改方法:

http://www.cnblogs.com/lishenglyx/archive/2010/01/07/1641190.html 

呵呵

收获园豆:50
LittlePeng | 老鸟四级 |园豆:3445 | 2010-03-27 20:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册