2014-02-24 34 views
0

我想实现的东西,如:C#并行多任务

  • 创建一批蒙戈的查询

  • 对于每个查询,得到的反序列化蒙戈数据设置为ObjectA

  • 所有ObjectA映射到ObjectB列表(需要给予一定的时间,我们正在与几百万对象的工作)

  • 当映射完成,upserts所有ObjectB(中环),以一个新的蒙戈DB/collection(也需要一些时间),并开始读取/映射下一个数据用,如果一个查询

  • 设置接下来的映射是最后蒙戈UPSERT结束前完成,等待它完成,然后开始编写数据设置为蒙戈

现在,我一直在Task玩弄的时候,我觉得它的方式去,但我很难得到如何做到这一点。

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

如何创建一个“取/图任务”和“写入MONGO任务”之间的“依赖”?

任何帮助表示感谢,谢谢!

+0

可以使用WaitHandle基类作为ManualResetEvent类对象实例,例如 –

+0

当我阅读它时需要某种同步以避免赛车条件。这使得无法执行多线程,因为您希望避免在将前一个对象插入到新数据库之前完成下一个对象?我现在唯一能想到的或者正在做的就是用Parallel.for(每个)进行映射,并设置保留顺序的选项。但是“插入”必须以任何方式完成。 – woutervs

+0

实际上,“插入”不需要按顺序完成。我可以使用多线程,但它会导致内存消耗问题,因为我必须将大量数据传递给线程。 @ArturMustafin:我会研究一下,可能是一种可能性。 – LaurentH

回答

0

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

您可以为您创造过程的每个阶段块,然后把它们连在一起。

  1. 执行查询(TransformBlock)
  2. 变换反应(TransformBlock)
  3. UPSERT(ActionBlock)

,那么你可以张贴在一个循环中唯一查询数据到数据流,并设置并行如所须。例如只要你没有内存问题,但保持阶段3不平行