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