HttpWebResponse多个文件下载

本文关键字:文件下载 HttpWebResponse | 更新日期: 2023-09-27 18:02:48

我用这段代码从一个url下载一个文件。

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个文件(来自不同的url),有可能用不到20个线程来做吗?

编辑

HttpWebResponse没有async方法。我希望一些例子与BeginRead/BeginWrite的流。我认为它们不会从Threadpool中消耗线程

HttpWebResponse多个文件下载

您可以使用Task Parallel Library (TPL)。设置Degree of Parallelism。在你的场景中。设置为19

不,在不到20个线程中同时拥有20个下载流是不可能的。您可以使用ThreadPool。QueueUserWorkItem和限制线程计数在哪里,但这不是同时IMO。无论如何,你最好使用WebClient类和它的DownloadFileAsync方法。

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