2011-07-29 31 views
0

如何設計並行處理的工作流程我應該如何設計我的工作流,以便TAKS可以並行運行

我有數據分析scenarial情況。

有四個步驟basicly:

  1. 拾取任務從隊列讀取或接收消息throught API(也許web服務)來觸發所述服務

  2. 提交請求到遠程服務從步驟的參數1

  3. 從遠程服務等待完成,基地下載

  4. 對從第3步下載的數據執行處理

上面的四步看起來像一個序列工作流程。 我的問題是,我如何擴展它。

我每天可能需要執行數百到數千個任務。 如果我可以並行執行它們,那將會有很大的幫助。例如,一次運行20個任務。

那麼我們可以配置windows工作流基礎來運行並行嗎?

謝謝。

回答

0

你可能想要使用pfx(http://www.albahari.com/threading/part5.aspx),那麼你可以控制多少個線程來抓取,並使用PLINQ我覺得很有幫助。

因此,您可以遍歷URL列表,也許從文件或數據庫中讀取數據,然後在您的選擇中,您可以調用一個函數來執行處理。

如果您可以詳細瞭解您是否希望在不同的線程上獲取和處理數據,例如,可以更容易地給出更完整的答案。

UPDATE:

這是我會怎麼處理這個,但我也使用ConcurrentQueuehttp://www.codethinked.com/net-40-and-system_collections_concurrent_concurrentqueue),所以我可以將數據放入隊列,同時從中讀取。

這樣每個線程都可以安全出列,而不用擔心必須鎖定您的集合。

  Parallel.For(0, queue.Count, new ParallelOptions() { MaxDegreeOfParallelism = 20 }, 
       (j) => 
       { 
        String i; 
        queue.TryDequeue(out i); 
        // call out to URL 
        // process data 
       } 
      }); 

您可能需要將數據放到另一個併發收集並​​具有單獨處理,這取決於您的應用需求。

+0

嗨詹姆斯,我認爲我選擇使用工作流程,簡化我的編程......這樣我可以避開處理這些並行編程的東西...相反,實現它,當我archetect點吧....我要治療的整個工作流程的一個任務......所以,每當一個任務被稱爲..一個線程將負責一個工作流程...就像web服務。......不知道是什麼,我認爲是正確的。 ..謝謝你的回覆... – jojo

+0

使用PFX會雖然簡化您的編碼和PLINQ是如此有用,因爲它更抽象出來的線程。 –

0

根據您的任務和工作流建模的方式,您可以使用並行活動併爲要執行的不同任務創建不同的分支。每個分支都有自己的邏輯,WF運行庫會在等待第一個響應時立即啓動第二個WCF請求來檢索數據。這要求您明確建立分支數量的模型,但允許在每個分支中進行不同的活動。

但是從你描述它聽起來像你有每個任務的相同步驟,在這種情況下,你可以使用ParallelForEach活動模型,並有超過任務的集合迭代。每個任務對象都需要包含用於請求的所有信息。這要求每個任務都具有相同的步驟,但是您可以根據需要投入多個任務。

什麼工作最真的取決於你的場景。

相關問題