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); }
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); }