繁体   English   中英

通过Task.WhenAll实现多个异步/数组任务(无LINQ)

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

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

// 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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM