public virtual Task SetServicePropertiesAsync(ServiceProperties properties, BlobRequestOptions requestOptions, OperationContext operationContext, CancellationToken cancellationToken)
        {
            BlobRequestOptions modifiedOptions = BlobRequestOptions.ApplyDefaults(requestOptions, BlobType.Unspecified, this);

            operationContext = operationContext ?? new OperationContext();
            return(Executor.ExecuteAsyncNullReturn(
                       this.SetServicePropertiesImpl(properties, modifiedOptions),
                       modifiedOptions.RetryPolicy,
                       operationContext,
                       cancellationToken));
        }
        public virtual async Task <ContainerResultSegment> ListContainersSegmentedAsync(string prefix, ContainerListingDetails detailsIncluded, int?maxResults, BlobContinuationToken currentToken, BlobRequestOptions options, OperationContext operationContext, CancellationToken cancellationToken)
        {
            BlobRequestOptions modifiedOptions = BlobRequestOptions.ApplyDefaults(options, BlobType.Unspecified, this);
            ResultSegment <CloudBlobContainer> resultSegment = await Executor.ExecuteAsync(
                this.ListContainersImpl(prefix, detailsIncluded, currentToken, maxResults, modifiedOptions),
                modifiedOptions.RetryPolicy,
                operationContext,
                cancellationToken).ConfigureAwait(false);

            return(new ContainerResultSegment(resultSegment.Results, (BlobContinuationToken)resultSegment.ContinuationToken));
        }
        public virtual Task <ServiceStats> GetServiceStatsAsync(BlobRequestOptions options, OperationContext operationContext, CancellationToken cancellationToken)
        {
            BlobRequestOptions modifiedOptions = BlobRequestOptions.ApplyDefaults(options, BlobType.Unspecified, this);

            operationContext = operationContext ?? new OperationContext();

            return(Executor.ExecuteAsync(
                       this.GetServiceStatsImpl(modifiedOptions),
                       modifiedOptions.RetryPolicy,
                       operationContext,
                       cancellationToken));
        }
        public virtual Task <ICloudBlob> GetBlobReferenceFromServerAsync(StorageUri blobUri, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext, CancellationToken cancellationToken)
        {
            CommonUtility.AssertNotNull("blobUri", blobUri);

            BlobRequestOptions modifiedOptions = BlobRequestOptions.ApplyDefaults(options, BlobType.Unspecified, this);

            return(Executor.ExecuteAsync(
                       this.GetBlobReferenceImpl(blobUri, accessCondition, modifiedOptions),
                       modifiedOptions.RetryPolicy,
                       operationContext,
                       cancellationToken));
        }
        internal Task <IList <BlobBatchSubOperationResponse> > ExecuteAsync(CloudBlobClient client, BlobRequestOptions requestOptions = default(BlobRequestOptions),
                                                                            OperationContext operationContext = default(OperationContext), CancellationToken cancellationToken = default(CancellationToken))
        {
            requestOptions = requestOptions ?? BlobRequestOptions.BaseDefaultRequestOptions;
            BlobRequestOptions modifiedOptions = BlobRequestOptions.ApplyDefaults(requestOptions, BlobType.Unspecified, client);

            return(Executor.ExecuteAsync(
                       BatchImpl(this, client, requestOptions),
                       modifiedOptions.RetryPolicy,
                       operationContext,
                       cancellationToken));
        }
        public virtual Task <AccountProperties> GetAccountPropertiesAsync(BlobRequestOptions options, OperationContext operationContext, CancellationToken cancellationToken)
        {
            BlobRequestOptions modifiedOptions = BlobRequestOptions.ApplyDefaults(options, BlobType.Unspecified, this);

            operationContext = operationContext ?? new OperationContext();

            return(Task.Run(
                       () => Executor.ExecuteAsync(
                           this.GetAccountPropertiesImpl(modifiedOptions),
                           modifiedOptions.RetryPolicy,
                           operationContext,
                           cancellationToken), cancellationToken));
        }
        private async Task UploadFromMultiStreamAsync(IEnumerable <Stream> streamList, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext, CancellationToken cancellationToken)
#endif
        {
            CommonUtility.AssertNotNull("streamList", streamList);
            BlobRequestOptions modifiedOptions = BlobRequestOptions.ApplyDefaults(options, BlobType.BlockBlob, this.ServiceClient);

            operationContext = operationContext ?? new OperationContext();
            int           parallelOperations = modifiedOptions.ParallelOperationThreadCount.Value;
            List <string> blockList          = new List <string>();
            List <Task>   uploadTaskList     = new List <Task>();
            int           blockNum           = 0;

            progressIncrementer = progressIncrementer ?? AggregatingProgressIncrementer.None;

            foreach (Stream block in streamList)
            {
                if (uploadTaskList.Count == parallelOperations)
                {
                    // The await on WhenAny does not await on the upload task itself, hence exceptions must be repropagated.
                    await Task.WhenAny(uploadTaskList.ToArray()).ConfigureAwait(false);

                    uploadTaskList.RemoveAll(putBlockUpload =>
                    {
                        if (putBlockUpload.IsCompleted)
                        {
                            // If set, gets the AggregateException from the upload Task.
                            if (putBlockUpload.Exception != null)
                            {
                                throw putBlockUpload.Exception;
                            }

                            return(true);
                        }

                        return(false);
                    });
                }

                string blockId = Convert.ToBase64String(Encoding.UTF8.GetBytes(string.Format("Block_{0}", (++blockNum).ToString("00000"))));
                blockList.Add(blockId);

                // Capture stream.
                Stream localBlock = block;

                try
                {
#if !WINDOWS_RT
                    Task uploadTask = this.PutBlockAsync(blockId, block, null, accessCondition, modifiedOptions, operationContext, progressIncrementer, cancellationToken);
#else
                    Task uploadTask = this.PutBlockAsync(blockId, block, null, accessCondition, modifiedOptions, operationContext, cancellationToken);
#endif
                    Task cleanupTask = uploadTask.ContinueWith(finishedUpload =>
                    {
                        localBlock.Dispose();
                    });

                    uploadTaskList.Add(uploadTask);
                }
                catch (Exception)
                {
                    // This is necessary in case an exception is thrown in PutBlockAsync before the continuation is registered.
                    localBlock.Dispose();
                    throw;
                }
            }

            await Task.WhenAll(uploadTaskList).ConfigureAwait(false);

            await this.PutBlockListAsync(blockList, accessCondition, modifiedOptions, operationContext, cancellationToken).ConfigureAwait(false);
        }