public static Task UploadFromStreamAsync(
     this CloudBlockBlob blob, Stream stream, CancellationToken ct = default(CancellationToken))
 {
     ICancellableAsyncResult ar = blob.BeginUploadFromStream(stream, null, null);
     ct.Register(ar.Cancel);
     return Task.Factory.FromAsync(ar, blob.EndUploadFromStream);
 }
        /// <summary>
        ///     Uploads a stream to the Windows Azure Blob Service asynchronously.
        /// </summary>
        /// <param name="cloudBlob">Cloud blob client.</param>
        /// <param name="source">The stream providing the blob content. Use a seek-able stream for optimal performance.</param>
        /// <param name="accessCondition">
        ///     An <see cref="T:Microsoft.WindowsAzure.Storage.AccessCondition" /> object that represents the access conditions for the blob.
        /// </param>
        /// <param name="cancellationToken">Cancellation token.</param>
        public static Task UploadFromStreamAsync(
            this ICloudBlob cloudBlob,
            Stream source,
            AccessCondition accessCondition = null,
            CancellationToken cancellationToken = default (CancellationToken))
        {
            ICancellableAsyncResult asyncResult = cloudBlob.BeginUploadFromStream(source, accessCondition, null, null, null, null);
            CancellationTokenRegistration registration = cancellationToken.Register(p => asyncResult.Cancel(), null);

            return Task.Factory.FromAsync(
                asyncResult,
                result =>
                    {
                        registration.Dispose();
                        cloudBlob.EndUploadFromStream(result);
                    });
        }
        /// <summary>
        /// UploadFromStreamAsync
        /// </summary>
        /// <param name="blob"></param>
        /// <param name="sourceStream"></param>
        /// <param name="accessCondition"></param>
        /// <param name="options"></param>
        /// <param name="operationContext"></param>
        /// <returns></returns>
        public static async Task UploadFromStreamAsync(this ICloudBlob blob, Stream sourceStream, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext)
        {
            Func<AsyncCallback, Object, IAsyncResult> beginMethod = (cb, state) =>
            {
                return blob.BeginUploadFromStream(sourceStream, accessCondition, options, operationContext, cb, state);
            };

            Action<IAsyncResult> endMethod = (r) =>
            {
                blob.EndUploadFromStream(r);
            };

            await Task.Factory.FromAsync(beginMethod, endMethod, null);
        }