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 字節),可用於一切須要獨一標識符的盤算機和收集。 此標識符反復的能夠性異常小。
以上所述就是本文的全體內容了,願望年夜家可以或許愛好。