2014-02-24 37 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不平行