コード例 #1
0
 /// <summary>
 /// Puts the lease on the given blob in a broken state due to a break period of zero.
 /// </summary>
 /// <param name="blob">The blob with the lease.</param>
 /// <returns>The lease ID of the broken lease.</returns>
 internal static string SetInstantBrokenStateAPM(CloudBlob blob)
 {
     string leaseId = SetLeasedStateAPM(blob, null /* infinite lease */);
     using (AutoResetEvent waitHandle = new AutoResetEvent(false))
     {
         IAsyncResult result = blob.BeginBreakLease(TimeSpan.Zero, ar => waitHandle.Set(), null);
         waitHandle.WaitOne();
         blob.EndBreakLease(result);
     }
     
     return leaseId;
 }
コード例 #2
0
        /// <summary>
        /// Puts the lease on the given blob in an available state.
        /// </summary>
        /// <param name="blob">The blob with the lease.</param>
        internal static void SetAvailableStateAPM(CloudBlob blob)
        {
            bool shouldBreakFirst = false;

            try
            {
                blob.DeleteIfExists();
            }
            catch (StorageException exception)
            {
                if (exception.RequestInformation.ExtendedErrorInformation.ErrorCode == BlobErrorCodeStrings.LeaseIdMissing)
                {
                    shouldBreakFirst = true;
                }
                else
                {
                    throw;
                }
            }

            if (shouldBreakFirst)
            {
                using (AutoResetEvent waitHandle = new AutoResetEvent(false))
                {
                    IAsyncResult result = blob.BeginBreakLease(TimeSpan.Zero, ar => waitHandle.Set(), null);
                    waitHandle.WaitOne();
                    blob.EndBreakLease(result);
                    blob.Delete();
                }
            }

            CreateBlob(blob);
        }