栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C#生成唯一不重复订单号

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#生成唯一不重复订单号

在弄电商类网站的时候,往往是根据年月日时分秒的格式生成订单号(yyyyMMddHHmmss),为了解决并发性,就直接在生成订单号的区域块加上lock。

  下面,我们来简单测试一下。

1.新建项目(控制台应用程序)

2.新建一个类:OrderIdHelper.cs

 /// 
 /// 订单助手
 /// 
 class OrderIdHelper
 {
   private static readonly object Locker = new object();
   private static string _tempId = "";

   /// 
   /// 生成订单编号
   /// 
   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.发现一个不错的订单号生成规则,稍作改动: 不重复订单号生成规则(原网址)

/// 
/// 订单助手
/// 
public class OrderHelper
{
  /// 
  /// 防止创建类的实例
  /// 
  private OrderHelper() { }

  private static readonly object Locker = new object();
  private static int _sn = 0;

  /// 
  /// 生成订单编号
  /// 
  /// 
  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 字节),可用于所有需要唯一标识符的计算机和网络。 此标识符重复的可能性非常小。

以上所述就是本文的全部内容了,希望大家能够喜欢。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/124954.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号