예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        public static Task <string> AcquireLeaseAsync(this ICloudBlockBlob blob)
        {
            Require.NotNull(blob, "blob");

            return(blob.AcquireLeaseAsync(null));
        }