HttpWebResponse多个文件下载

时间:2013-03-08 08:31:19

标签: c# .net multithreading .net-2.0

我使用此代码从网址下载文件。

Stream stm = myHttpResponse.GetResponseStream();
byte[] buff = new byte[4096];
Stream fs = new FileStream("c:\\file1.txt", FileMode.Append , FileAccess.Write);
int r = 0;

while((r = stm.Read(buff, 0, buff.Length)) > 0)
{
    fs.Write(buff, 0, r);
}

如果我想同时下载20个文件(来自不同的网址),可以用少于20个线程进行下载吗?

修改

HttpWebResponse没有异步方法。我希望流的BeginRead / BeginWrite有一些例子。我认为他们不会使用来自Threadpool的线程

2 个答案:

答案 0 :(得分:1)

您可以使用Task Parallel Library (TPL)。并设置Degree of Parallelism。在您的方案中。将其设置为19。

答案 1 :(得分:0)

不,在不到20个线程中不可能有20个同时下载流。您可以使用ThreadPool.QueueUserWorkItem并限制线程的计数,但不是同时的IMO。 无论如何,最好使用WebClient类及其DownloadFileAsync方法。

WebClient client = new WebClient();
client.Credentials = new NetworkCredential("username", "password");
client.DownloadFileAsync(uriString,fileName);