2013-05-16 4 views
2

В настоящее время я выполняю задачу, которая занимает много времени для выполнения. Итак, я выбрал threading. Но у меня есть цикл 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()); 
    } 
    } 

Внутри моего Еогеаспа Я бег некоторых методов, передавая значение ячеек в DataRow.

+1

Какие проблемы у вас есть –

+0

Как правило, вы хотите создать свои темы * вне * цикла, а затем дать каждому из них часть выполняемой работы. Как предполагает Мэтью, Parallel.ForEach предназначен для этого. – EricLaw

+0

@ DanielA.White Я пытаюсь реализовать parallel.foreach, который выполняется намного быстрее, чем foreach, но не может реализовать его на datarows моего datatable. – Nagaraj

ответ

11

Предполагая, что ваши нити не связаны между собой, самый простой способ, вероятно, использовать Parallel.Foreach

Если являются связаны и вам нужно указано wait поведение, вы должны рассмотреть вопрос об использовании Task Parallel Library

EDIT: Если вы хотите вызывать методы параллельно из вашего цикла, вы можете использовать Parallel.Invoke, но, похоже, это проще сделать в родительской коллекции строк (если только у вас очень мало строк или строки зависят от действий друг друга)

+0

+1 за избиение меня до удара и хороший ответ. – Brian

+0

@Matthew Я пытаюсь реализовать параллель. Прежде, но не смог обработать ее должным образом, может предложить мне любое предложение – Nagaraj

+0

@Cherry отредактируйте исходный вопрос, чтобы показать, что вы пробовали, когда пытались использовать Parallel.Foreach, мы можем то скажите, что пошло не так, потому что это не сработало. –

Смежные вопросы