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