通过 Task.WhenAll(无 LINQ)实现多个 Async/Array 任务

Implementing multiple Async/Array Tasks via Task.WhenAll (no LINQ)

MSDN 示例(回复:https://msdn.microsoft.com/en-us/library/hh556530.aspx)演示了这种 运行 多个异步 I/O 下载操作的技术,使用 Async/Await 构造和 LINQ 对象库,例如如下代码片段所示:

// Create a query. 
IEnumerable<Task<int>> downloadTasksQuery = 
    from url in urlList select ProcessURLAsync(url);

// Use ToArray to execute the query and start the download tasks.
Task<int>[] downloadTasks = downloadTasksQuery.ToArray();

int[] lengths = await Task.WhenAll(downloadTasks);


async Task<int> ProcessURL(string url, HttpClient client)
{
    byte[] byteArray = await client.GetByteArrayAsync(url);
    DisplayResults(url, byteArray);
    return byteArray.Length;
}

我正在寻找实现相同功能的简单替代方案 无需 LINQ,即将这两行替换为一些核心 Generics/Array C# 方法:

IEnumerable<Task<int>> downloadTasksQuery = from url in urlList select ProcessURLAsync(url);
Task<int>[] downloadTasks = downloadTasksQuery.ToArray();

这很简单:

var taskList = new List<Task<int>>();
foreach(var url in urlList) {
  taskList.Add(ProcessURLAsync(url));
}

Task<int>[] downloadTasks = taskList.ToArray();