public async Task <bool> PromoteToLeaderAsync() { if (m_acquiredLease == null) { EnsureBlobExists(); try { var acquiredLeaseId = await m_blob.AcquireLeaseAsync(); await ManageLeaseTimoutAsync(acquiredLeaseId); m_acquiredLease = acquiredLeaseId; m_leaseAcquisitionTime = DateTimeOffset.UtcNow; } catch (LeaseAlreadyAcquiredException exception) { s_logger.Debug( exception, "Promotion session ({StreamName}, {ConsumerId}) to leader failed.", m_streamName, m_consumerId); } } else { await ManageLeaseTimoutAsync(m_acquiredLease); } if (m_acquiredLease == null) { await BreakLeasIfExpiredAsync(); } return(m_acquiredLease != null); }
public static async Task <Lease> AcquireAsync(ICloudBlockBlob blob, TimeSpan leasePeriod) { Require.NotNull(blob, "blob"); try { var leaseId = await blob.AcquireLeaseAsync(leasePeriod); return(new Lease(leaseId)); } catch (LeaseAlreadyAcquiredException) { } return(NotAcquired); }
public static Task <string> AcquireLeaseAsync(this ICloudBlockBlob blob) { Require.NotNull(blob, "blob"); return(blob.AcquireLeaseAsync(null)); }