• 生成数据库自增不重复ID的方法


    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                var list = new HashSet<string>(101);
                for (int i = 0; i < 100; i++)
                {
                    var task = Task.Factory.StartNew((m =>
                    {
                        var id = McidGenerator.NewMcid();
                        list.Add(id);
                        Console.WriteLine($"序号:{(int)m + 1}  线程ID:{Thread.CurrentThread.ManagedThreadId} 生成的MCID:{id}");
                    }), i);
                }
                Thread.Sleep(10000);
                var n = 1;
                foreach (var li in list.OrderBy(i=>i))
                {
                    
                    Console.WriteLine($"序号:{(int)n + 1} 生成的MCID:{li}");
                    n++;
                }
                Console.ReadLine();
            }
        }
    
        public static class McidGenerator
        {
            private const int MaxId = 9;
            private static bool _allNew = true;
            private static int _incrementId = 0;
            private static DateTimeOffset _current = DateTimeOffset.Now;
            private static readonly object SequenceLock = new object();
    
            public static string NewMcid()
            {
                lock (SequenceLock)
                {
                    var now = DateTimeOffset.Now;
                    if (_allNew)
                    {
                        _allNew = false;
                        _current = now;
                        return now.ToString("yyyyMMddHHmmssfffff") + _incrementId;
                    }
    
                    if (Convert.ToDateTime(_current.ToString("yyyy-MM-dd HH:mm:ss.fffff")) == Convert.ToDateTime(now.ToString("yyyy-MM-dd HH:mm:ss.fffff")))
                    {
                        _incrementId++;
                        _current = now;
                        return now.ToString("yyyyMMddHHmmssfffff") + _incrementId;
                    }
    
                    _incrementId++;
                    _incrementId = _incrementId > MaxId ? 0 : _incrementId;
                    _current = now;
                    return now.ToString("yyyyMMddHHmmssfffff") + _incrementId;
                }
            }
        }
    }
  • 相关阅读:
    pb数据窗口下拉数据窗口列的排序(翻译)
    pb重复行的检查(翻译)
    pb数据窗口如何按当前列的值过滤下拉数据窗口(翻译)
    PB中通过对象名获取对象并获取对象下的子对象
    有关医嘱中的bid,qd等执行频率
    pb数据窗口新增的列编辑后不会分行
    words
    here.less
    Springboot use tomcat JNDI
    genemotion
  • 原文地址:https://www.cnblogs.com/hanstar/p/9901968.html
Copyright © 2020-2023  润新知