c#parallelism多任务

时间:2014-02-24 12:30:08

标签: c# task-parallel-library

我希望实现以下目标:

  • 创建一堆mongo查询

  • 对于每个查询,将反序列化的mongo数据集作为ObjectA

  • 获取
  • 将所有ObjectA映射到ObjectB列表(假设我们正在使用数百万个对象,需要一些时间)

  • 映射完成后,将所有ObjectB(在循环中)挂起到新的mongo db / collection(也需要一些时间),并开始使用下一个数据集获取/映射下一个数据集查询

  • 如果下一个映射在最后一个mongo upsert完成之前完成,等待它完成然后开始将该数据集写入mongo

现在我一直在玩Task,我认为这是一条路,但我很难知道如何做到这一点。

我应该运行2个任务数组吗?

如何创建"依赖"在" fetch / map任务"之间和#34;写入mongo任务"?

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

查看数据流http://msdn.microsoft.com/en-us/library/hh228603(v=vs.110).aspx

您可以为流程的每个阶段创建一个块,然后将它们链接在一起。

  1. 执行查询(TransformBlock)
  2. 转换响应(TransformBlock)
  3. upsert(ActionBlock)
  4. 然后您可以将唯一查询数据发布到循环中的数据流,并根据需要设置并行度。例如阶段1和阶段的并行性2只要你没有内存问题,但保持第3阶段不平行