protected override IEnumerator <IAsyncResult> CreateQueueImpl(IAccountIdentifier identity, string account, string queue, long defaultMessageTtl, long defaultMessageVisibilityTimeout, NameValueCollection metadata, TimeSpan?timeout, RequestContext requestContext, AsyncIteratorContext <CreateQueueResult> context) { RemainingTime remainingTime = new RemainingTime(timeout); List <SASPermission> sASPermissions = new List <SASPermission>() { SASPermission.Write, SASPermission.Create }; SASAuthorizationParameters sASAuthorizationParameter = this.authorizationManager.CheckAccessWithMultiplePermissions(identity, account, null, null, PermissionLevel.Write, SasType.AccountSas, SasResourceType.Container, sASPermissions, remainingTime); if (metadata == null) { metadata = new NameValueCollection(); } IStorageAccount storageAccount = this.storageManager.CreateAccountInstance(account); IAsyncResult asyncResult = base.BeginGetQueueProperties(identity, account, queue, false, sASAuthorizationParameter, new TimeSpan?(remainingTime), requestContext, context.GetResumeCallback(), context.GetResumeState("QueueManager.CreateQueueImpl")); yield return(asyncResult); QueueProperties queueProperty = null; bool flag = true; try { queueProperty = base.EndGetQueueProperties(asyncResult); } catch (ContainerNotFoundException containerNotFoundException) { flag = false; } if (!flag) { Logger <IRestProtocolHeadLogger> .Instance.Info.Log("Contacting XAC Server in order to create the queue"); storageAccount.Timeout = remainingTime; DateTime?nullable = null; asyncResult = storageAccount.BeginCreateQueueContainer(queue, nullable, null, QueueHelpers.SerializeMetadata(metadata), context.GetResumeCallback(), context.GetResumeState("QueueManager.CreateQueueImpl")); yield return(asyncResult); bool flag1 = false; try { storageAccount.EndCreateQueueContainer(asyncResult); } catch (ContainerAlreadyExistsException containerAlreadyExistsException) { flag1 = true; } if (flag1) { flag = true; asyncResult = base.BeginGetQueueProperties(identity, account, queue, false, new TimeSpan?(remainingTime), requestContext, context.GetResumeCallback(), context.GetResumeState("QueueManager.CreateQueueImpl")); try { queueProperty = base.EndGetQueueProperties(asyncResult); } catch (ContainerNotFoundException containerNotFoundException1) { flag = false; } if (flag) { if (!QueueHelpers.IsMetadataSame(queueProperty.Metadata, metadata)) { throw new ContainerAlreadyExistsException(string.Concat("Queue '", queue, "' already exists, and the metadata is different.")); } context.ResultData = CreateQueueResult.AlreadyExists; } } } else { Logger <IRestProtocolHeadLogger> .Instance.Info.Log("Queue already exists no need to contact XAC Server."); if (!QueueHelpers.IsMetadataSame(queueProperty.Metadata, metadata)) { throw new ContainerAlreadyExistsException(string.Concat("Queue '", queue, "' already exists, and the metadata is different.")); } context.ResultData = CreateQueueResult.AlreadyExists; } }