//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ public int GetNextIndex(out long pMilli) { long m; int i; lock (this) { m = Sharpflake.GetMilli(); if (m > vLastMilli) { vLastMilli = m; vIndex = 0; } else if (++vIndex >= Sharpflake.SequenceMax) { m = SpinUntilNextMilli(); vIndex = 0; } i = vIndex; //capture value before leaving the lock } pMilli = m; return(i); }
/*--------------------------------------------------------------------------------------------*/ private long SpinUntilNextMilli() { long m = Sharpflake.GetMilli(); while (m <= vLastMilli) { m = Sharpflake.GetMilli(); } vLastMilli = m; return(m); }