在C#.NET中任意长的Parallel.For循环

时间:2012-11-14 12:19:32

标签: c# .net parallel-processing task-parallel-library

Parallel.For允许循环的最大迭代次数为long.MaxValue

Parallel.For(long fromInclusive, long toExclusive, Action<long> body)
{
}

但是如果我需要执行一个并行循环会比long.MaxValue有更多的迭代呢?

E.G。我有一个函数,它返回所需的迭代次数作为BigInteger(因为long和ulong不够大)。

我是否必须“自己动手”Parallel.For实现。我的直觉是,这将是不好的做法!

编辑:基于各种评论......我想我已经咬过的东西比我可以咀嚼的多了!

2 个答案:

答案 0 :(得分:4)

Int64.MaxValue是9,223,372,036,854,775,807。

如果您需要执行更多迭代,那么您真的需要重新考虑您的设计。

答案 1 :(得分:2)

我同意@davenewza,但如果您必须,这可能是一个解决方案

Parallel.ForEach(BigIntSequence(1,10), (i) => Console.WriteLine(i));

public IEnumerable<BigInteger> BigIntSequence(BigInteger min,BigInteger max)
{
    BigInteger bi = min;
    while (bi<max)
    {
        yield return bi;
        bi += 1;     
    }
}