C#生成獨一不反復定單號。本站提示廣大學習愛好者:(C#生成獨一不反復定單號)文章只能為提供參考,不一定能成為您想要的結果。以下是C#生成獨一不反復定單號正文
在弄電商類網站的時刻,常常是依據年代日時分秒的格局生成定單號(yyyyMMddHHmmss),為懂得決並發性,就直接在生成定單號的區域塊加上lock。
上面,我們來簡略測試一下。
1.新建項目(掌握台運用法式)

2.新建一個類:OrderIdHelper.cs
/// <summary>
/// 定單助手
/// </summary>
class OrderIdHelper
{
private static readonly object Locker = new object();
private static string _tempId = "";
/// <summary>
/// 生成定單編號
/// </summary>
public static void GenerateId()
{
lock (Locker) //lock 症結字可確保當一個線程位於代碼的臨界區時,另外一個線程不會進入該臨界區。
{
var orderId = "Wen" + DateTime.Now.ToString("yyyyMMddHHmmss"); //年代日時分秒
if (string.Equals(_tempId, orderId))
{
throw new Exception("定單號反復!");
}
_tempId = orderId;
Console.WriteLine(orderId);
}
}
}
3.Program.cs
class Program
{
static void Main(string[] args)
{
//創立包括兩個線程的數組
var threads = new Thread[2]
{
new Thread(OrderIdHelper.GenerateId),
new Thread(OrderIdHelper.GenerateId),
};
foreach (var thread in threads)
{
//線程啟動
thread.Start();
}
Console.Read();
}
}
4.成果:=====OrderIdDemo_1.rar 點我下載=====

5.發明一個不錯的定單號生陳規則,稍作修改: 不反復定單號生陳規則(原網址)
/// <summary>
/// 定單助手
/// </summary>
public class OrderHelper
{
/// <summary>
/// 避免創立類的實例
/// </summary>
private OrderHelper() { }
private static readonly object Locker = new object();
private static int _sn = 0;
/// <summary>
/// 生成定單編號
/// </summary>
/// <returns></returns>
public static string GenerateId()
{
lock (Locker) //lock 症結字可確保當一個線程位於代碼的臨界區時,另外一個線程不會進入該臨界區。
{
if (_sn == int.MaxValue)
{
_sn = 0;
}
else
{
_sn++;
}
Thread.Sleep(100);
return "Wen" + DateTime.Now.ToString("yyyyMMddHHmmss")+ _sn.ToString().PadLeft(10, '0');
}
}
}
6.關於應用GUID的小我看法。
①不清晰生成的時光,不便利治理。
②官方說明:GUID 是一個 128 位整數(16 字節),可用於一切須要獨一標識符的盤算機和收集。 此標識符反復的能夠性異常小。
以上所述就是本文的全體內容了,願望年夜家可以或許愛好。