Обновление прогресса в циклах Parallel.For()
Как вы можете догадаться, индекс цикла Parallel.For() переходит от одного значения к другому. Как я могу оценить объем проделанной работы?
Благодарю.
2 ответа
Решение
Держать счетчик, а не смотреть на индекс? Например:
int counter = 0;
Parallel.For(4, 500, i => {
// TODO: something useful...
int progress = Interlocked.Increment(ref counter);
Console.WriteLine("{0}: {1}", progress, i);
});
(Interlocked
использование важно, чтобы избежать получения гоночных условий при доступе counter
)
int progress = 0;
Parallel.For( from, to, i => {
// do the job
Interlocked.Increment(ref progress);
});
теперь фактический прогресс (float)(to - from) / progress