C#版本的国外朋友已经封装了,大家可以去看看:https://github.com/ccollie/snowflake-net
强大的网友出来个简化版本:http://blog.csdn.net/***/article/details/*** (地址我就不贴了,对前辈需要最起码的尊敬)
一开始我用的是这个简化版本,后来发现有重复项。。。(demo:https://github.com/dunitian/TempCode/tree/master/2016-11-16/Twitter_Snowflake)

全局ID的激烈讨论:https://q.cnblogs.com/q/53552/
之后在外国大牛的基础上重写修改了部分内容(https://github.com/ccollie/snowflake-net),添加了一些注解等【支持Core】。现在是可以去Nuget直接下载使用的:Snowflake.Net

源码地址:https://github.com/dunitian/snowflake-net
测试用例:

测试代码:
| usingSystem;usingSystem.Collections.Generic;usingSystem.Threading;usingSystem.Threading.Tasks;usingSnowflake.Net;namespaceSnowflake.ZConsole{    classProgram    {        privatestaticintN = 2000000;        privatestaticHashSet<long> set= newHashSet<long>();        privatestaticIdWorker worker = newIdWorker(1, 1);        privatestaticinttaskCount = 0;        staticvoidMain(string[] args)        {            Task.Run(() => GetID());            Task.Run(() => GetID());            Task.Run(() => GetID());            Task.Run(() => Printf());            Console.ReadKey();        }        privatestaticvoidPrintf()        {            while(taskCount != 3)            {                Console.WriteLine("...");                Thread.Sleep(1000);            }            Console.WriteLine(set.Count == N * taskCount);        }        privatestaticobjecto = newobject();        privatestaticvoidGetID()        {            for(vari = 0; i < N; i++)            {                varid = worker.NextId();                lock(o)                {                    if(set.Contains(id))                    {                        Console.WriteLine("发现重复项 : {0}", id);                    }                    else                    {                        set.Add(id);                    }                }            }            Console.WriteLine($"任务{++taskCount}完成");        }    }} | 
可能有些人只关心以后怎么用?==》
IdWorker worker = new IdWorker(1, 1); //大并发的情况下,减少new的次数可以有效避免重复的可能
var id = worker.NextId();
有可能上面的减少new有些同志不太懂,(⊙o⊙)…,举个例子:
测试代码不变的情况下,改这么一句:


完整调用demo:(https://github.com/dunitian/snowflake-net/tree/master/Demo)

core:(https://github.com/dunitian/snowflake-net/tree/master/Demo.Core)

原文地址:http://www.cnblogs.com/dunitian/p/6130543.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
