Esempio n. 1
0
        public async Task <ISingletonLockHandle> TryLockAsync(string lockId, TimeSpan lockPeriod, CancellationToken cancellationToken)
        {
            var blob = _client.GetBlobClient(Path.Combine(_lockScheme.Directory, lockId));

            var lease = await TryAcquireLeaseAsync(blob, lockPeriod, cancellationToken).ConfigureAwait(false);

            if (lease == null)
            {
                return(null);
            }

            if (!string.IsNullOrEmpty(lease.LeaseId))
            {
                await WriteLeaseBlobMetadata(blob, lease.LeaseId, lockId, cancellationToken).ConfigureAwait(false);
            }

            var lockHandle = new BlobLockHandle(lease.LeaseId, lockId, blob.GetBlobLeaseClient(lease.LeaseId), lockPeriod);

            return(lockHandle);
        }
Esempio n. 2
0
        public async Task <ISingletonLockHandle> TryLockAsync(string lockId, TimeSpan lockPeriod, CancellationToken cancellationToken)
        {
            var container = _client.GetContainerReference(_lockScheme.ContainerName);
            var directory = container.GetDirectoryReference(_lockScheme.Directory);
            var blob      = directory.GetBlockBlobReference(lockId);

            var leaseId = await TryAcquireLeaseAsync(blob, lockPeriod, cancellationToken).ConfigureAwait(false);

            if (string.IsNullOrEmpty(leaseId))
            {
                return(null);
            }

            if (!string.IsNullOrEmpty(lockId))
            {
                await WriteLeaseBlobMetadata(blob, leaseId, lockId, cancellationToken).ConfigureAwait(false);
            }

            var lockHandle = new BlobLockHandle(leaseId, lockId, blob, lockPeriod);

            return(lockHandle);
        }