У меня вопрос об асинхронных операциях в C#. Предположим, у меня есть такой код:Асинхронные загрузки файлов в C#
public async void Download(string[] urls)
{
for(int i = 0; i < urls.Length; i++);
{
await DownloadHelper.DownloadAsync(urls[i], @"C:\" + i.ToString() + ".mp3");
}
}
Но этот код на самом деле не загружает файлы асинхронно. Он начинает загружать файл с первого URL-адреса и затем ожидает эту операцию. Затем он начинает загружать файл со второго URL ... и так далее.
Таким образом, файлы загружаются один за другим, и я хотел бы, чтобы они начали загрузку одновременно.
Как я мог это сделать?
Я часто возвращаю 'void' из методов' async', но только если я пропускаю метод «CancellationToken» для асинхронного метода (т. е. все еще есть дескриптор «забытого» метода) – spender
@spender, но этот токен ничего не говорит вам. Вы не знаете, закончилась ли операция или существует ли исключение. [Вы должны избегать «async void» (http://msdn.microsoft.com/en-us/magazine/jj991977.aspx) – i3arnon
... назовем это плохой привычкой;) – spender