Parallel.For()循环中的进度更新

时间:2010-10-21 09:29:28

标签: .net parallel-extensions

你可以猜到Parallel.For()循环的索引从一个值跳转到另一个值。我如何估算完成的工作量?

感谢。

2 个答案:

答案 0 :(得分:7)

通过保留计数器而不是查看索引?例如:

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时遇到竞争条件至关重要

答案 1 :(得分:3)

int progress = 0;
Parallel.For( from, to, i => {
// do the job
Interlocked.Increment(ref progress);
});

现在实际进展为(float)(to - from) / progress