【发布时间】:2021-10-13 08:57:37
【问题描述】:
我有一个数据类型为Bigint 的 SQL 列,因此当我在多线程环境中使用 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);
}
}
【问题讨论】:
-
为什么要使用当前 Tick 计数的 哈希码 作为随机种子?
-
@gunr2171 我尝试了很多东西,但没有任何效果。
-
@Mysterious288 你用的是什么数据库? MS SQL、PostgreSQL、MySQL?
-
随机不生成唯一数字。首选incrementals 或GUIDs。
-
请不要使用
new Random(DateTime.Now.Ticks.GetHashCode())- 它比new Random()更糟糕。
标签: c# multithreading