当由Task Scheduler启动时,C#/ Random()返回相同的值

时间:2018-12-03 11:17:42

标签: c# random

我使用Random()函数以获得随机双精度值。手动启动时效果很好(每次都会很好地生成新的随机值),但是每次由Windows Task Scheduler启动时,它们的值都是相同的。

您知道为什么以及如何解决此问题吗?谢谢

    var random = new Random(DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Hour);

    double randomStat = new double();

    randomStat = Math.Round(GetRandomDouble(random, 5, 250), 1);


static double GetRandomDouble(Random random, double min, double max)
{
     return min + (random.NextDouble() * (max - min));
}

1 个答案:

答案 0 :(得分:0)

真正的随机性在计算机中实际上是不可能的。相反,我们使用伪随机数生成器。

规则是,给定相同的种子和相同的顺序序列,pseude-RNG将始终返回完全相同的结果。

默认情况下,Random将基于本地DateTime隐式检索种子值。由于这是Unix时间的衍生部分(自X时刻以来的每一个滴答声),因此在极少数情况下(创建实例毫秒级,这是Random出现问题的常见原因),您只会得到重复。

您要做的是根据小时,分钟和秒为它提供种子值。今天的7:00:00 PM与明天的7:00:00相同。