我希望使用httpclient下载大量文件,对它们执行一些耗时但不昂贵的计算,然后在运行一些显示它尚未存在的查询后将结果添加到我的数据库。
我如何从概念上做到这一点(只是等待的位置等会有所帮助)
我目前有以下内容:
获取地址列表 添加(等待网页下载,然后继续处理)到任务列表 foreach元素列表,等待它,然后将其添加到数据库中。
然而,这似乎基本上是连续运行它。
应如何设计?
答案 0 :(得分:3)
我会使用TPL Dataflow
设置管道。你张贴地址和演员是:
尽可能使用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);