C#生成唯一不重復訂單號
在弄電商類網(wǎng)站的時候,往往是根據(jù)年月日時分秒的格式生成訂單號(yyyyMMddHHmmss),為了解決并發(fā)性,就直接在生成訂單號的區(qū)域塊加上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 關鍵字可確保當一個線程位于代碼的臨界區(qū)時,另一個線程不會進入該臨界區(qū)。
{
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)
{
//創(chuàng)建包含兩個線程的數(shù)組
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.發(fā)現(xiàn)一個不錯的訂單號生成規(guī)則,稍作改動: 不重復訂單號生成規(guī)則(原網(wǎng)址)
/// <summary>
/// 訂單助手
/// </summary>
public class OrderHelper
{
/// <summary>
/// 防止創(chuàng)建類的實例
/// </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 關鍵字可確保當一個線程位于代碼的臨界區(qū)時,另一個線程不會進入該臨界區(qū)。
{
if (_sn == int.MaxValue)
{
_sn = 0;
}
else
{
_sn++;
}
Thread.Sleep(100);
return "Wen" + DateTime.Now.ToString("yyyyMMddHHmmss")+ _sn.ToString().PadLeft(10, '0');
}
}
}
6.關于使用GUID的個人見解。
?、俨磺宄傻臅r間,不方便管理。
?、诠俜浇忉專篏UID 是一個 128 位整數(shù)(16 字節(jié)),可用于所有需要唯一標識符的計算機和網(wǎng)絡。 此標識符重復的可能性非常小。
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
相關文章
C#執(zhí)行表達式樹(Expression Tree)的具體使用
本文將深入探討表達式樹的基本概念、創(chuàng)建方法、修改和刪除節(jié)點、查詢和遍歷技巧以及在C#中的應用示例,具有一定的參考價值,感興趣的可以了解一下2024-03-03
淺談C#各種數(shù)組直接的數(shù)據(jù)復制/轉(zhuǎn)換
下面小編就為大家?guī)硪黄獪\談C#各種數(shù)組直接的數(shù)據(jù)復制/轉(zhuǎn)換。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08
Unity3D使用陀螺儀控制節(jié)點旋轉(zhuǎn)
這篇文章主要為大家詳細介紹了Unity3D使用陀螺儀控制節(jié)點旋轉(zhuǎn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11

