0

我使用此代码从 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 没有异步方法。我希望有一些流的 BeginRead/BeginWrite 示例。我认为他们不消耗线程池中的线程

4

2 回答 2

1

您可以为此使用Task Parallel Library(TPL)。并设置Degree of Parallelism. 在你的情况下。将其设置为 19。

于 2013-03-08T08:43:25.277 回答
0

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

WebClient client = new WebClient();
client.Credentials = new NetworkCredential("username", "password");
client.DownloadFileAsync(uriString,fileName);
于 2013-03-08T08:54:31.400 回答