我有一个简单的程序,它返回低于某个数字的素数之和。
当我在不使用 TPL 的情况下运行该程序时,它会给出正确的结果,但是当我使用 TPL 运行该程序时,它会给出不正确的结果。
我无法理解这有什么问题。有人可以帮忙吗?
这是代码:
static void Main(string[] args)
{
var executionStartTime = DateTime.Now;
Console.WriteLine(GetSumOfPrimesBelowviaTPL(2000000));
Console.WriteLine("End Time: " + (DateTime.Now - executionStartTime).ToString("T"));
var a = Console.ReadLine();
}
private static long GetSumOfPrimesBelow(int number)
{
long sumOfPrimes = 0;
for (int i = 2; i < number; i++)
{
if ((i == 2 || i % 2 != 0) && (i == 3 || i % 3 != 0) && IsPrime(i))
{
sumOfPrimes += i;
}
}
return sumOfPrimes;
}
private static long GetSumOfPrimesBelowviaTPL(int number)
{
long sumOfPrimes = 0;
var primeNumbersList = new List<int>();
Parallel.For(2, number, i =>
{
if ((i == 2 || i % 2 != 0) && (i == 3 || i % 3 != 0) && IsPrime(i))
{
primeNumbersList.Add(i);
}
});
foreach (var item in primeNumbersList)
{
Console.WriteLine(item);
sumOfPrimes += item;
}
return sumOfPrimes;
}