public Task ReleaseLockAsync(IdGeneratorState idGeneratorState, Guid sessionId)
 {
     if (idGeneratorState.IsLocked)
     {
         throw new Exception("Cannot release lock for state that is still locked");
     }
     return(idGeneratorStateCollection.ReplaceOneAsync(
                x => x.DataType == idGeneratorState.DataType && x.LockSessionId == sessionId,
                idGeneratorState));
 }
예제 #2
0
        private async Task ReleaseLockAsync(IdGeneratorState idGeneratorState)
        {
            if (!idGeneratorState.IsLocked)
            {
                return;
            }
            var sessionId = idGeneratorState.LockSessionId.Value;

            idGeneratorState.Unlock(sessionId);
            await idGeneratorStateRepository.ReleaseLockAsync(idGeneratorState, sessionId);
        }
        public async Task <bool> TryGetLockAsync(IdGeneratorState idGeneratorState)
        {
            if (!idGeneratorState.IsLocked)
            {
                throw new Exception("Cannot get lock for state that is not locked");
            }
            var replaceResult = await idGeneratorStateCollection.ReplaceOneAsync(
                x => x.DataType == idGeneratorState.DataType && !x.IsLocked,
                idGeneratorState,
                new ReplaceOptions { IsUpsert = true });

            return(replaceResult.IsAcknowledged && replaceResult.ModifiedCount == 1);
        }