问题代码在下面,其中包括两个问题。第一个问题:我用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);
// }
//}
}
}
int i = stream.Read(buffer, 0, 256);
之后打印就能发现何时Read到返回值。至于删除using(){..}部分,那么线程就瞬间执行完了。