【问题标题】:multiple threads in for each loop每个循环有多个线程
【发布时间】:2013-05-17 03:15:56
【问题描述】:

我目前正在执行一项需要大量执行时间的任务。所以,我选择了线程。但是我的线程中有一个 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 中,我通过在数据行中传递单元格的值来运行一些方法。

【问题讨论】:

  • 你有什么问题
  • 您通常希望在循环之外创建线程,然后让每个线程完成部分工作。正如 Matthew 所建议的,Parallel.ForEach 就是为此而设计的。
  • @DanielA.White 我正在尝试实现 parallel.foreach,它的执行速度比 foreach 快得多,但无法在我的数据表的数据行上实现它。

标签: c# multithreading


【解决方案1】:

假设你的线程不相关,最简单的方法可能是使用Parallel.Foreach

如果相关的并且你需要指定wait行为,你应该考虑使用Task Parallel Library

编辑:如果您想在循环中并行调用方法,您可以使用 Parallel.Invoke 但在父行集合上执行此操作似乎更容易(除非您的行数很少或行取决于彼此的操作)

【讨论】:

  • @Matthew 我一直在尝试实现 parallel.foreach 但无法正确处理它,你能给我建议吗
  • @Cherry 编辑您的原始问题以显示您在尝试使用 Parallel.Foreach 时尝试了什么,然后我们可以告诉您出了什么问题导致它无法正常工作。
  • @ScottChamberlain 我正在尝试调用三种方法来获取数据行中数据列的值。我想在一个线程中运行它们中的每一个。但无法知道如何实现它。希望您在查看我为该问题所做的更新后理解
  • @Matthew 你的建议帮助了我,解决了它。thnx man..Parallel.ForEach 对我有用
  • @Cherry 很高兴我能帮上忙。也许您可以发布您最终使用的代码?
猜你喜欢
  • 1970-01-01
  • 2017-06-13
  • 2013-11-13
  • 2023-03-03
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多