5

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

谢谢。

4

2 回答 2

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

于 2010-10-21T09:33:40.143 回答
3
int progress = 0;
Parallel.For( from, to, i => {
// do the job
Interlocked.Increment(ref progress);
});

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

于 2010-10-21T09:33:18.613 回答