C# 在独立线程上运行的两个实例交叉并复制了它不应该拥有的数据

C# 在独立线程上运行的两个实例交叉并复制了它不应该拥有的数据,c#,multithreading,C#,Multithreading,我有一个运行自动测试的可执行文件。今天我通过运行一个.bat文件同时运行了4组测试 测试是在我们的软件中构建策略。我们得到了一个SQL错误,这是由两个实例同时输入相同的保单持有人信息引起的 在每种情况下,测试都会从1500多个姓名和地址的列表中随机选择,因此他们可能(尽管不太可能)都选择了相同的记录 令人费解的是,两者都输入了相同的驾照号码,这是随机生成的 这在100/1000次跑步中从未发生过 运行同一可执行文件的两个实例是否可能以某种方式相互交叉污染 Random rnd

我有一个运行自动测试的可执行文件。今天我通过运行一个.bat文件同时运行了4组测试

测试是在我们的软件中构建策略。我们得到了一个SQL错误,这是由两个实例同时输入相同的保单持有人信息引起的

在每种情况下,测试都会从1500多个姓名和地址的列表中随机选择,因此他们可能(尽管不太可能)都选择了相同的记录

令人费解的是,两者都输入了相同的驾照号码,这是随机生成的

这在100/1000次跑步中从未发生过

运行同一可执行文件的两个实例是否可能以某种方式相互交叉污染

        Random rnd      = new Random();

        else if (Crawlspace.DLState == "NEW MEXICO")
            {
                int DLNum = rnd.Next(100000000, 999999999);
                Crawlspace.DLNumber = DLNum.ToString();

测试是以这种方式构建的,以确保在每种情况下都有唯一的记录。

感谢Knoop。这就解释了我不理解的地方

为了解决这个问题,我将使用这一行随机生成种子以及

Random rand=new Random(Guid.NewGuid().GetHashCode())


(这是从另一个非常类似的问题得到的)

您是否给每个线程一个不同的随机种子?随机并不保证唯一。人们确实偶尔中彩票$$$
rnd
的定义在哪里?这是
Random
类的实例吗?默认的种子是时间相关的,并且不能保证线程之间有唯一的种子。想象一下你和我正在掷骰子。如果你用骰子掷6,我就不能掷6了吗?不。如果我也掷6,这是否意味着我们两个骰子之间的某个东西“越过”了?不可以。如果使用没有自定义种子的
随机
,它将使用系统时间作为随机种子。如果同时创建两个实例,则它们很有可能获得相同的系统时间,从而获得相同的种子值。如果它们以相同的种子值开始,它们将生成相同的随机值。因此,选择相同的记录并神奇地创建相同的随机驾驶执照如果您解决了问题,您应该在此处编辑解释并将其标记为已接受的答案。这不是答案。请将其作为答案或删除。您的实现仍可能导致冲突。当您使用GUID的哈希代码时,不能保证两个不同的GUID不会产生相同的哈希代码,从而产生相同的种子-。很酷,谢谢Kami。显然,我还有很多东西要学。