private static Queue<(DateTime, long)> _queue = new Queue<(DateTime, long)>();
private static int _count = 1000;
static void Main(string[] args)
{
var workerId1 = 15;
var workerId2 = 51;
Task.Factory.StartNew(() =>
{
Run(1, (ushort)workerId1);
});
Task.Factory.StartNew(() =>
{
Run(1, (ushort)workerId2);
});
Task.Factory.StartNew(() =>
{
CheckId();
});
Console.ReadLine();
}
/// <summary>
/// 运行生成id
/// </summary>
/// <param name="method"></param>
/// <param name="workerId"></param>
private static void Run(short method, ushort workerId)
{
var options = new IdGeneratorOptions()
{
Method = method,
WorkerId = workerId,
//WorkerIdBitLength = 9,
// SeqBitLength = 8,
};
IIdGenerator idGen = new DefaultIdGenerator(options);
int count = _count;
//生成一定数量的id
while (count > 0)
{
_queue.Enqueue((DateTime.Now, idGen.NewLong()));
//间隔10毫秒
Task.Delay(10).Wait();
count--;
}
}
private static void CheckId()
{
Console.WriteLine("check start");
var i = 0;
var dict = new Dictionary<long, DateTime>();
int error = 0;
while (dict.Count < _count)
{
while (_queue.TryDequeue(out var item))
{
i++;
if (dict.ContainsKey(item.Item2))
{
error += 1;
Console.WriteLine($"{item.Item2} - { item.Item1.ToString("HH:mm:ss fffff")} | {dict[item.Item2].ToString("HH:mm:ss fffff")}");
}
else
{
dict.Add(item.Item2, item.Item1);
}
}
Task.Delay(10).Wait();
}
Console.WriteLine($"check end:{error}");
}