Difference between OpenReadAsync and DownloadFromStreamAsync functions of CloudBlockBlob

半城伤御伤魂 提交于 2019-12-21 13:02:30

问题


What is the difference between OpenReadAsync and DownloadToStreamAsync functions of CloudBlockBlob in the Azure blob storage? Searched in google but could not find an answer.


回答1:


Both OpenReadAsync and DownloadToStreamAsync could initiate an asynchronous operation for you to retrieve the blob stream. Based on my testing, you could have a better understanding of them by the following sections:  

Basic Concepts

DownloadToStreamAsync:Initiates an asynchronous operation to download the contents of a blob to a stream.

OpenReadAsync:Initiates an asynchronous operation to download the contents of a blob to a stream.  

Usage

a) DownloadToStreamAsync

Sample Code:

using (var fs = new FileStream(<yourLocalFilePath>, FileMode.Create))
{
    await blob.DownloadToStreamAsync(fs);
}

  b) OpenReadAsync

Sample Code:

//Set buffer for reading from a blob stream, the default value is 4MB.
blob.StreamMinimumReadSizeInBytes=10*1024*1024; //10MB
using (var blobStream = await blob.OpenReadAsync())
{
    using (var fs = new FileStream(localFile, FileMode.Create))
    {   
       await blobStream.CopyToAsync(fs);
    }
}

Capturing Network requests via Fiddler

a) DownloadToStreamAsync

  b) OpenReadAsync

  According to the above, DownloadToStreamAsync just sends one get request for retrieving blob stream, while OpenReadAsync sends more than one request to retrieving blob stream based on the “Blob.StreamMinimumReadSizeInBytes” you have set or by default value.




回答2:


OpenReadAsync returns a Task<Stream> and you use it with an await.

sample test method

CloudBlobContainer container = GetRandomContainerReference();
            try
            {
                await container.CreateAsync();

                CloudBlockBlob blob = container.GetBlockBlobReference("blob1");
                using (MemoryStream wholeBlob = new MemoryStream(buffer))
                {
                    await blob.UploadFromStreamAsync(wholeBlob);
                }

                using (MemoryStream wholeBlob = new MemoryStream(buffer))
                {
                    using (var blobStream = await blob.OpenReadAsync())
                    {
                        await TestHelper.AssertStreamsAreEqualAsync(wholeBlob, blobStream);
                    }
                }
            }

DownloadToStreamAsync is a virtual (can be overridden) method returning a task and takes stream object as input.

sample usage.

await blog.DownloadToStreamAsync(memoryStream);


来源:https://stackoverflow.com/questions/38865060/difference-between-openreadasync-and-downloadfromstreamasync-functions-of-cloudb

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!