gpt4 book ai didi

c# - C# 中的任务 - 使用 Random 的结果不明确

转载 作者:太空狗 更新时间:2023-10-30 01:16:09 26 4
gpt4 key购买 nike

我正在学习 C# 中的异步编程,并编写了这段代码来测试任务并行库(控制台应用程序):

static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();

var opr1 = new SlowOperation();
var opr2 = new SlowOperation();

//TASK
Console.WriteLine("Started processing using TASK. Start: {0}", sw.Elapsed);
sw.Start();

Task.Factory.StartNew(() => opr1.PerformSlowOperation(1));
Task.Factory.StartNew(() => opr2.PerformSlowOperation(2));

Console.WriteLine("Stopped processing using TASK. Stop: {0}", sw.Elapsed);
sw.Stop();

}

运行缓慢的地方是:

public class SlowOperation
{
public void PerformSlowOperation(int id)
{
var rand = new Random();
double sum = 0;

for (int i = 0; i < 100000000; i++)
{
var number = Convert.ToDouble(rand.Next(100)) / 100;
sum += number;
}
Console.WriteLine("Finished processing operation no. {0}. Final sum calculated is: {1}", id, sum.ToString("0.##"));
}
}

谁能帮我理解为什么 SlowOperation 类的每个实例产生的总和完全相同?

最佳答案

Random 以低分辨率根据时间播种。这是一个经典问题,在我看来,这是一个 API 设计错误。我认为这已经在 CoreCLR 存储库中进行了更改。

new Random().Next() == new Random().Next() 几乎总是正确的。

另请注意,问题中 95% 的代码与问题无关。以后你可以自己简化代码,直到只剩下随机调用。这使您可以自己发现此类问题。

关于c# - C# 中的任务 - 使用 Random 的结果不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36385137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com