Обновление прогресса в циклах 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

Другие вопросы по тегам