У меня есть приложение, написанное на C #. В этом приложении мне нужно скачать несколько файлов. Как только все файлы загружены, мне нужно сделать что-то еще. Чтобы загрузить файлы одновременно, я написал следующее:
private void DownloadFiles(string[] targets)
{
var tasks = new List<Task>();
foreach (var target in targets)
{
var task = DownloadFile(target);
tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());
}
private async Task DownloadFile(string target)
{
using (var wc = new WebClient())
{
wc.DownloadProgressChanged += (object sender, DownloadProgressChangedEventArgs e) => {
Console.WriteLine(e.ProgressPercentage + "% downloaded.");
}
wc.DownloadFileCompleted += (object sender, AsyncCompletedEventArgs e) => {
Console.WriteLine(target + " was downloaded.");
// TODO: Signal this "Task" is done
}
await wc.DownloadFileTaskAsync(target, localPath);
}
}
Может быть, я запутался. По-моему, мне нужно что-то сделать в DownloadFileCompleted
. Или, может быть, достаточно строки await wc.DownloadFileTaskAsync
.
Как загрузить несколько файлов одновременно, но дождаться окончания загрузки всех файлов, прежде чем продолжить?