/// <summary> /// 生成下一个序列号 /// </summary> public long NextValue() { // 当前区间不存在,重新获取一个区间 if (null == _currentRange) { lock (_lock) { if (null == _currentRange) { _currentRange = _sequenceRangeManager.NextRange(_name); } } } // 当value值为-1时,表明区间的序列号已经分配完,需要冲洗那获取区间 long value = _currentRange.GetAndIncrement(); if (value == -1) { lock (_lock) { for (; ;) { if (_currentRange.Over) { _currentRange = _sequenceRangeManager.NextRange(_name); } value = _currentRange.GetAndIncrement(); if (value == -1) { continue; } break; } } } if (value < 0) { throw new ArgumentException($"序列值溢出。value = {value}"); } return(value); }