2013-05-16 81 views
2

我目前正在執行一個耗費大量時間執行的任務。因此,我選擇了線程。但我在我想創建多個線程的線程中有一個foreach循環。 我很擔心這是做這件事的恰當方法。每個循環的多個線程

我的代碼是類似以下內容:

Thread th= new Thread(new ThreadStart(ThreadProcedure)); 
    th.IsBackground = true; 
    th.Start(); 

    public void ThreadProcedure() 
    { 
    //I have datatable here 
    foreach(DataRow in mytable.rows) 
    { 
    //here I want to create a multiple threads, say like 

    //Thread1 on which I want to run method1 
    Method1(dr["Column1"].ToString()); 
    //Thread2 on which I want to run method2 
    Method2(dr["Column2"].ToString()); 
    //Thread3 on which I want to run method3 
     Method3(dr["Column3"].ToString()); 
    } 
    } 

裏面我的foreach我通過將單元格的值在數據行上運行的一些方法。

+1

你有什麼問題 –

+0

你一般都想在循環的外面創建你的線程,然後給每一個線程做部分工作。正如馬修所說,Parallel.ForEach是爲此而設計的。 – EricLaw

+0

@ DanielA.White我正在嘗試執行parallel.foreach,它比foreach執行速度快得多,但無法在我的數據表的datarows上實現它。 – Nagaraj

回答

11

假設你的線程都沒有關係,最簡單的方法很可能是使用Parallel.Foreach

如果相關的,你需要指定wait行爲,你應該考慮使用Task Parallel Library

編輯:如果你想在你的循環中並行地調用方法,你可以使用Parallel.Invoke,但是在父行集合上執行它似乎更容易(除非你有很少的行或者行依賴於彼此的動作)

+0

+1打了我一拳,還有一個很好的答案。 – Brian

+0

@Matthew我一直在嘗試很多實現parallel.foreach,但無法正確處理它,你可以建議我任何建議 – Nagaraj

+0

@Cherry編輯您的原始問題,以顯示您嘗試使用Parallel.Foreach時嘗試的,我們可以然後告訴你什麼地方出了問題,它不工作。 –