国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#生成唯一不重復訂單號

2019-10-29 21:41:34
字體:
來源:轉載
供稿:網友
本文給大家介紹的是使用C#生成唯一不重復訂單號的方法,主要用到了lock鎖,有需要的小伙伴可以參考下。
 

在弄電商類網站的時候,往往是根據年月日時分秒的格式生成訂單號(yyyyMMddHHmmss),為了解決并發性,就直接在生成訂單號的區域塊加上lock。

  下面,我們來簡單測試一下。

1.新建項目(控制臺應用程序)

C#生成唯一不重復訂單號

2.新建一個類:OrderIdHelper.cs
 

  1. /// <summary> 
  2. /// 訂單助手 
  3. /// </summary> 
  4. class OrderIdHelper 
  5.   private static readonly object Locker = new object(); 
  6.   private static string _tempId = ""
  7.  
  8.   /// <summary> 
  9.   /// 生成訂單編號 
  10.   /// </summary> 
  11.   public static void GenerateId() 
  12.   { 
  13.     lock (Locker)  //lock 關鍵字可確保當一個線程位于代碼的臨界區時,另一個線程不會進入該臨界區。 
  14.     { 
  15.       var orderId = "Wen" + DateTime.Now.ToString("yyyyMMddHHmmss"); //年月日時分秒 
  16.  
  17.       if (string.Equals(_tempId, orderId)) 
  18.       { 
  19.         throw new Exception("訂單號重復!"); 
  20.       } 
  21.  
  22.       _tempId = orderId; 
  23.  
  24.       Console.WriteLine(orderId); 
  25.     } 
  26.   } 
?

3.Program.cs
 

  1. class Program 
  2.   static void Main(string[] args) 
  3.   { 
  4.     //創建包含兩個線程的數組 
  5.     var threads = new Thread[2] 
  6.     { 
  7.       new Thread(OrderIdHelper.GenerateId), 
  8.       new Thread(OrderIdHelper.GenerateId), 
  9.     }; 
  10.  
  11.     foreach (var thread in threads) 
  12.     { 
  13.       //線程啟動 
  14.       thread.Start(); 
  15.     } 
  16.  
  17.     Console.Read(); 
  18.   } 
?

4.結果:=====OrderIdDemo_1.rar 點我下載=====

C#生成唯一不重復訂單號

5.發現一個不錯的訂單號生成規則,稍作改動: 不重復訂單號生成規則(原網址)
 

  1. /// <summary> 
  2. /// 訂單助手 
  3. /// </summary> 
  4. public class OrderHelper 
  5.   /// <summary> 
  6.   /// 防止創建類的實例 
  7.   /// </summary> 
  8.   private OrderHelper() { } 
  9.  
  10.   private static readonly object Locker = new object(); 
  11.   private static int _sn = 0; 
  12.  
  13.   /// <summary> 
  14.   /// 生成訂單編號 
  15.   /// </summary> 
  16.   /// <returns></returns> 
  17.   public static string GenerateId() 
  18.   { 
  19.     lock (Locker)  //lock 關鍵字可確保當一個線程位于代碼的臨界區時,另一個線程不會進入該臨界區。 
  20.     { 
  21.       if (_sn == int.MaxValue) 
  22.       { 
  23.         _sn = 0; 
  24.       } 
  25.       else 
  26.       { 
  27.         _sn++; 
  28.       } 
  29.        
  30.       Thread.Sleep(100); 
  31.  
  32.       return "Wen" + DateTime.Now.ToString("yyyyMMddHHmmss")+ _sn.ToString().PadLeft(10, '0'); 
  33.     } 
  34.   }  
?

 6.關于使用GUID的個人見解。

?、俨磺宄傻臅r間,不方便管理。

 ?、诠俜浇忉專篏UID 是一個 128 位整數(16 字節),可用于所有需要唯一標識符的計算機和網絡。 此標識符重復的可能性非常小。

以上所述就是本文的全部內容了,希望大家能夠喜歡。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 英吉沙县| 武强县| 静乐县| 黄梅县| 姜堰市| 徐州市| 安康市| 秦皇岛市| 云阳县| 云阳县| 原平市| 会昌县| 武山县| 湖州市| 即墨市| 闵行区| 星子县| 威宁| 南安市| 兴山县| 苏尼特右旗| 如东县| 建德市| 宜黄县| 喀喇沁旗| 阿荣旗| 溆浦县| 沙洋县| 定襄县| 龙陵县| 遂平县| 洱源县| 金阳县| 巨鹿县| 托克逊县| 凤冈县| 噶尔县| 明溪县| 黔西县| 旬阳县| 临洮县|