首页 > 解决方案 > 不在多线程环境中为具有 Bigint 作为数据类型的 SQL 列生成随机唯一 ID

问题描述

我有一个数据类型为 as 的 SQL 列Bigint,因此当我在多线程环境中使用 C# Random 类生成唯一编号时,我看到有重复值而不是唯一值,我只能看到系统 GUID 是生成的唯一选项唯一的ID,你能帮我解决这个问题吗?

private Object thisLock = new Object();  
public Random a = new Random(DateTime.Now.Ticks.GetHashCode());
private void NewNumber()
{
  lock (thisLock)  
  {  
    MyNumber = a.Next(0, 10);
  }
}

标签: c#multithreading

解决方案


该类Random生成随机值,而不是唯一值。在您的示例代码中,唯一整数的最大数量为 10(从 0 到 9)。因此,如果您至少调用此方法 11 次,则可以保证有一个或多个重复项。

对于数据库,您应该使用标识列。


推荐阅读