Параллельный. для выполнения цикла

#c# #multithreading #loops #parallel-processing

#c# #многопоточность #циклы #параллельная обработка

Вопрос:

Сценарий

Мне нужно создавать n потоки (не равные количеству выполняемых функций), которые выполняют несколько функций параллельно. Итак, мой код

     static void Main() 
    { 
        Parallel.For(0, 2, i => // it creates 2 threads as number of iterations.why?
            {
                  method1();
                  method2();
                  method3();
                  method4();
                  method5();
                  method6();
                  method7();
                  method8();
                  method9();
                  method10();
            });
     }
  

Как MaxDegreeOfParallelism наилучшим образом использовать свойство здесь? Может кто-нибудь, пожалуйста, помочь?

Ответ №1:

Как пожелаете

 var methods = new Action[] {
    method1, method2, method3, method4, method5, method6, method7, method8, method9, method10 };

Parallel.For(0, methods.Length, i =>
{
    methods[i]();
});
  

Таким образом, вы можете установить степень распараллеливания

 var options = new ParallelOptions { MaxDegreeOfParallelism = 4 };

Parallel.For(0, methods.Length, options, i =>
  

Когда вы писали Parallel.For(0, 2 , он создает цикл для указанного количества элементов: от 0 (включительно) до 2 (исключительно). Следовательно, может быть максимум два потока.

Ответ №2:

Кажется, вы ищете параллель.Вызвать вместо Parallel.For (я не вижу никакого цикла в вашем коде):

   ParallelOptions options = new ParallelOptions() {
    //TODO: carry out experiment on your workstation to find out the right number
    MaxDegreeOfParallelism = 4, 
  };

  // Run method1..method10 in parallel while using options 
  Parallel.Invoke(options,
    method1,
    method2,
    method3,
    method4,
    method5,
    method6,
    method7,
    method8,
    method9,
    method10
  );