我使用此代码从网址下载文件。
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的线程
答案 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);