public DistributedLockException(string resource, string lockId, DistributedLockBadStatus status, Exception innerException = null) : base(
         "Lock is not acquired", innerException)
 {
     base.Data.Add("Resource", resource);
     base.Data.Add("LockId", lockId);
     base.Data.Add("Status", status);
 }
示例#2
0
        public async Task <IDisposable> CreateLockAsync(string resource, TimeSpan?expiryTime = null, TimeSpan?waitTime = null, TimeSpan?retryTime = null,
                                                        CancellationToken cancellationToken  = default)
        {
            await Connect();

            if (_options.InstanceName != null)
            {
                resource = string.Join('-', _options.InstanceName, resource);
            }

            IRedLock @lock = await _distributedLockFactory.CreateLockAsync(resource, expiryTime ?? _defaultExpiryTime, waitTime ?? _defaultWaitTime,
                                                                           retryTime ?? _defaultRetryTime, cancellationToken);

            if (@lock.IsAcquired)
            {
                return(@lock);
            }

            var lockId = @lock.LockId;
            DistributedLockBadStatus status = RedLockStatusToDistributedLockBadStatus(@lock.Status);

            @lock.Dispose();
            throw new DistributedLockException(resource, lockId, status);
        }