给定一个包含 Urls 的输入文本文件,我想一次下载相应的文件。我使用这个问题UserState的答案 使用 WebClient 和 TaskAsync 从 Async CTP 下载作为参考。
public void Run()
{
List<string> urls = File.ReadAllLines(@"c:/temp/Input/input.txt").ToList();
int index = 0;
Task[] tasks = new Task[urls.Count()];
foreach (string url in urls)
{
WebClient wc = new WebClient();
string path = string.Format("{0}image-{1}.jpg", @"c:/temp/Output/", index+1);
Task downloadTask = wc.DownloadFileTaskAsync(new Uri(url), path);
Task outputTask = downloadTask.ContinueWith(t => Output(path));
tasks[index] = outputTask;
}
Console.WriteLine("Start now");
Task.WhenAll(tasks);
Console.WriteLine("Done");
}
public void Output(string path)
{
Console.WriteLine(path);
}
Run Code Online (Sandbox Code Playgroud)
我预计文件的下载将在“Task.WhenAll(tasks)”点开始。但事实证明,输出看起来像
c:/temp/Output/image-2.jpg c:/temp/Output/image-1.jpg c:/temp/Output/image-4.jpg …