как добавить процент завершения в параллельных вложенных циклах?

#c# #parallel-processing

#c# #параллельная обработка

Вопрос:

например, я хотел бы видеть 1% ~ 100%, как я мог это сделать?

 Parallel.For<Dictionary<int, long>>(0, r1, () => new Dictionary<int, long>(), (j, loop, tmpWinRange) =>
    {
        for (int k = 0; k < r2; k  )
            for (int l = 0; l < r3; l  )
                for (int m = 0; m < r4; m  )
                {
                    int pay = GetPay(j, k, l, m);
                    tmpWinRange[pay]  ;
                }
        return tmpWinRange;
    },
(x) => { tmpWinRangeCollection.Add(x); }
);
  

Комментарии:

1. Насколько велик r1 ? Достаточно ли изменять ход выполнения каждый раз, когда завершается самый внешний цикл (тот, с j которым)?

2. @svick r1, r2, r3, r4 находятся примерно в диапазоне 20 ~ 100

Ответ №1:

Как насчет использования взаимосвязанного приращения для обновления прогресса?

 int progressCount = 0;
Parallel.For<Dictionary<int, long>>(0, r1, () => new Dictionary<int, long>(), 
    (j, loop, tmpWinRange) => 
    { 
        for (int k = 0; k < r2; k  ) 
            for (int l = 0; l < r3; l  ) 
                for (int m = 0; m < r4; m  ) 
                { 
                    int pay = GetPay(j, k, l, m); 
                    tmpWinRange[pay]  ; 
                }
        Interlocked.Increment(ref progressCount);

        return tmpWinRange; 
    }, 
    (x) => { tmpWinRangeCollection.Add(x); } 
);