使用异步和集合

时间:2014-03-31 09:42:57

标签: .net entity-framework async-await c#-5.0

我希望使用httpclient下载大量文件,对它们执行一些耗时但不昂贵的计算,然后在运行一些显示它尚未存在的查询后将结果添加到我的数据库。

我如何从概念上做到这一点(只是等待的位置等会有所帮助)

我目前有以下内容:

获取地址列表 添加(等待网页下载,然后继续处理)到任务列表 foreach元素列表,等待它,然后将其添加到数据库中。

然而,这似乎基本上是连续运行它。

应如何设计?

2 个答案:

答案 0 :(得分:3)

我会使用TPL Dataflow设置管道。你张贴地址和演员是:

  1. 网页下载
  2. 处理
  3. 添加到数据库
  4. 尽可能使用async(只要操作真正异步)并设置高MaxDegreeOfParallelism以允许TPL自行选择最佳值。

答案 1 :(得分:1)

我会让下载/处理并行运行并等待它们全部完成。代码看起来像这样:

// get a collection of "hot" Tasks running in parallel
var tasks = myCollection.Select(x => DownloadAndProcessAsync(x));

// await the completion of all Tasks
await Task.WhenAll(tasks);