Как можно выполнить подцикл FOR в (отдельных) нескольких потоках параллельно в C#?

173
15 сентября 2018, 17:40

Есть такой код с двумя циклами for:

for (int a = 0; a < numb1; a++)
 {
//тут весь код для запуска и работы потоков для цикла ниже.
for (int d = 0; d < numb2; d++)//нужно чтобы этот подцикл выполнялся в 10 потоках (не суть количество потоков может быть разное) паралельно.
 {
 //тут не важно (код для выполнения в потоках).
 }
}

нужно чтобы второй внутренний цикл выполнялся в отдельных параллельных потоках, и желательно весь код для запуска потоков поместился бы внутрь первого цикла ,такое как то можно реализовать вообще на C#?

Answer 1

всё просто

for (int a = 0; a < numb1; a++)
{
    Parallel.For(0, numb2, d => {
        //тут не важно (код для выполнения в потоках).
    });
}

С указанием количества потоков

for (int a = 0; a < numb1; a++)
{
    Parallel.For(
        0, 
        numb2, 
        new ParallelOptions() {MaxDegreeOfParallelism = 42}, 
        d =>
        {
            //тут не важно (код для выполнения в потоках).
        });
}
Answer 2

Тут есть несколько вариантов решения (как всегда в программировании :D)
Вы можете, как уже говорилось ранее, распараллелить этот цикл руками, используя Thread/ThreadPool/Tasks и т.д.
Но скорее всего вы хотите использовать что-то вроде класа Parallel, в котором уже есть метод For, распараллеливающий это за вас :D
Его вызов будет выглядеть у вас как-то так:

Parallel.For(0, numb2, (x)=>{ /* а тут 'неважный' код */})
READ ALSO
Делегат не работает. Почему? С#

Делегат не работает. Почему? С#

Недавно писал приложение про кота! Одно решил другое началось!

276
Иерархия treeView c 3-м уровнем вложенности

Иерархия treeView c 3-м уровнем вложенности

Помогите разобратьсякак корректно построить иерархию для 3 вложенности в treeview, а именно для 3 классов, описывающих таблицы БД (entity framework):

212
RefreshToken в JWT

RefreshToken в JWT

По ответам из этого вопроса я понял как создавать jwt токенНо теперь встал вопрос, как его неявно обновлять

185