我正在尝试同时下载多个文件。但是,所有文件都会依次下载。因此,首先下载此文件@"http://download.geofabrik.de/europe/cyprus-latest.osm.pbf"
,然后开始下载该文件@"http://download.geofabrik.de/europe/finland-latest.osm.pbf",
,下一个要下载的文件是@"http://download.geofabrik.de/europe/great-britain-latest.osm.pbf"
,依此类推。
但是我想下载同时。
所以我有以下基于the code from this answer的代码:
static void Main(string[] args)
{
Task.Run(async () =>
{
await DownloadFiles();
}).GetAwaiter().GetResult();
}
public static async Task DownloadFiles()
{
IList<string> urls = new List<string>
{
@"http://download.geofabrik.de/europe/cyprus-latest.osm.pbf",
@"http://download.geofabrik.de/europe/finland-latest.osm.pbf",
@"http://download.geofabrik.de/europe/great-britain-latest.osm.pbf",
@"http://download.geofabrik.de/europe/belgium-latest.osm.pbf",
@"http://download.geofabrik.de/europe/belgium-latest.osm.pbf"
};
foreach (var url in urls)
{
string fileName = url.Substring(url.LastIndexOf('/'));
await DownloadFile(url, fileName);
}
}
public static async Task DownloadFile(string url, string fileName)
{
string address = @"D:\Downloads";
using (var client = new WebClient())
{
await client.DownloadFileTaskAsync(url, $"{address}{fileName}");
}
}
但是,当我在文件系统中看到文件时,我看到文件正在下载依次一个接一个地]],而不是同时下载:
此外,我尝试使用this approach,但是没有同时下载:
static void Main(string[] args) { IList<string> urls = new List<string> { @"http://download.geofabrik.de/europe/cyprus-latest.osm.pbf", @"http://download.geofabrik.de/europe/finland-latest.osm.pbf", @"http://download.geofabrik.de/europe/great-britain-latest.osm.pbf", @"http://download.geofabrik.de/europe/belgium-latest.osm.pbf", @"http://download.geofabrik.de/europe/belgium-latest.osm.pbf" }; Parallel.ForEach(urls, new ParallelOptions { MaxDegreeOfParallelism = 10 }, DownloadFile); } public static void DownloadFile(string url) { string address = @"D:\Downloads"; using (var sr = new StreamReader(WebRequest.Create(url) .GetResponse().GetResponseStream())) using (var sw = new StreamWriter(address + url.Substring(url.LastIndexOf('/')))) { sw.Write(sr.ReadToEnd()); } }
您能告诉我如何同时下载吗?
任何帮助将不胜感激。
我正在尝试同时下载多个文件。但是,所有文件都会依次下载。因此,首先,此文件下载了@“ http://download.geofabrik.de/europe/cyprus-latest.osm ....
Eldar的解决方案可以进行一些小的编辑。这是已编辑的完整的DownloadFiles
方法:
foreach (var url in urls)
{
string fileName = url.Substring(url.LastIndexOf('/'));
await DownloadFile(url, fileName); // you wait to download the item and then move the next
}
这将一个接一个异步下载它们。