我有这段代码:
await Task.Factory.StartNew(
() => Parallel.ForEach(
urls,
new ParallelOptions { MaxDegreeOfParallelism = 2 },
async url =>
{
Uri uri = new Uri(url);
string filename = System.IO.Path.GetFileName(uri.LocalPath);
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(url))
using (HttpContent content = response.Content)
{
// ... Read the string.
using (var fileStream = new FileStream(config.M_F_P + filename, FileMode.Create, FileAccess.Write))
{
await content.CopyToAsync(fileStream);
}
}
}));
MessageBox.Show("Completed");
这段代码应该可以处理超过800个元素的列表,但它没有等待下载和文件写入完成。实际上,它开始下载和写入,显示消息,然后在后台继续下载...我需要并行异步地下载许多文件,但我必须等待它们全部下载完毕。这段代码有什么问题吗?
new
一个新的HttpClient
并不是好的做法,每次. 所以也许应该将其移到异步操作之外? - Pure.Krome