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