Обновление прогресса в циклах Parallel.For () - PullRequest
5 голосов
/ 21 октября 2010

Как вы можете догадаться, индекс цикла Parallel.For () переходит от одного значения к другому.Как оценить объем проделанной работы?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 21 октября 2010

За счетчик, а не за индексом? Например:

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)

3 голосов
/ 21 октября 2010
int progress = 0;
Parallel.For( from, to, i => {
// do the job
Interlocked.Increment(ref progress);
});

теперь фактический прогресс (float)(to - from) / progress

...