我已经搜索过这个问题,但我找到的解决方案都没有帮助。也许有人可以帮助我。
我有以下循环:
private static readonly Random RANDOM = new Random();
...
int[] array; // is initialized, when used. ;)
if (array.Sum() != 0)
{
int j = 0;
do {
j = RANDOM.Next(8);
} while (array[j] == 0);
}
整个循环在另一个循环中,而这个循环又在 Parallel.Foreach
循环中。
看起来,j
总是0
。大多数时候它并不明显,但是如果 array[0] == 0
,那么它就不会跳出循环。
我怀疑 do-while
循环可能太快了。但也在几秒钟后(~30)它不会离开循环。所以 Random
似乎没有返回新的或不同的值(即使在同一个线程中)。
我也试过this solution但没有效果。
最佳答案
试试这个,因为 Random 不是线程安全的:
private static Random RANDOM = new Random();
private static object _randomLock = new object();
...
int[] array; // is initialized, when used. ;)
if (array.Sum() != 0)
{
int j = 0;
do {
lock(_randomLock)
{
j = RANDOM.Next(8);
}
} while (array[j] == 0);
}
关于C# 随机不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16865182/