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 内で、データ行のセルの値を渡すことでいくつかのメソッドを実行しています。

4

1 に答える 1

11

スレッドが関連していないと仮定すると、 Parallel.Foreachを使用するのが最も簡単な方法です。

関連しており、特定waitの動作が必要な場合は、 Task Parallel Libraryの使用を検討する必要があります。

編集:ループ内から並列にメソッドを呼び出したい場合はParallel.Invokeを使用できますが、行の親コレクションで実行する方が簡単なようです (行がほとんどないか、行が互いのアクションに依存している場合を除きます)。 )

于 2013-05-16T18:09:10.480 に答える