2013-05-16 47 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时尝试的,我们可以然后告诉你什么地方出了问题,它不工作。 –