/// <summary> /// DownloadToStreamAsync /// </summary> /// <param name="blob"></param> /// <param name="stream"></param> /// <returns></returns> public static async Task DownloadToStreamAsync(this ICloudBlob blob, Stream stream) { var retVal = blob.BeginDownloadToStream(stream, null, null); IAsyncResult arRetVal = retVal as IAsyncResult; await Task.Factory.FromAsync(arRetVal, (r) => { blob.EndDownloadToStream(r); }); stream.Seek(0, 0); }
public static async Task<string> DownloadToString(this CloudBlockBlob blob) { using (var strm = new MemoryStream()) { await Task.Factory.FromAsync((cb, state) => blob.BeginDownloadToStream(strm, cb, state), ar => blob.EndDownloadToStream(ar), state: null); await strm.FlushAsync(); strm.Seek(0, SeekOrigin.Begin); return await new StreamReader(strm).ReadToEndAsync(); } }
/// <summary> /// Downloads the contents of a blob to a stream asynchronously. /// </summary> /// <param name="cloudBlob">Cloud blob client.</param> /// <param name="target">The target stream.</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 DownloadToStreamAsync( this ICloudBlob cloudBlob, Stream target, AccessCondition accessCondition = null, CancellationToken cancellationToken = default (CancellationToken)) { ICancellableAsyncResult asyncResult = cloudBlob.BeginDownloadToStream(target, accessCondition, null, null, null, null); CancellationTokenRegistration registration = cancellationToken.Register(p => asyncResult.Cancel(), null); return Task.Factory.FromAsync( asyncResult, result => { registration.Dispose(); cloudBlob.EndDownloadToStream(result); }); }