国产探花免费观看_亚洲丰满少妇自慰呻吟_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 字節),可用于所有需要唯一標識符的計算機和網絡。 此標識符重復的可能性非常小。

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 福州市| 麻城市| 清新县| 拉孜县| 海原县| 三门县| 古蔺县| 静海县| 祁门县| 平阴县| 襄樊市| 峡江县| 寻甸| 泸定县| 重庆市| 永州市| 商水县| 砀山县| 葵青区| 县级市| 肥城市| 屯昌县| 蒲城县| 冷水江市| 卓尼县| 延寿县| 新兴县| 台东市| 嵩明县| 栾川县| 潢川县| 绵竹市| 仁怀市| 县级市| 六安市| 顺义区| 浦北县| 渭源县| 沈阳市| 东城区| 东宁县|