#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
);