C# 从Azure Blob加载文件时管理memoryStream

C# 从Azure Blob加载文件时管理memoryStream,c#,asp.net-web-api,azure-storage-blobs,C#,Asp.net Web Api,Azure Storage Blobs,我正在为Azure Blob存储中的下载文件创建包装器。 我有一个简单的文件模型 public class File { public Stream Data { get; set; } public string Name { get; set; } public string Path { get; set; } public long Size { get; set; } } 我下载文件的方法如下所示 private async Task<File&

我正在为Azure Blob存储中的下载文件创建包装器。 我有一个简单的文件模型

public class File
{
    public Stream Data { get; set; }
    public string Name { get; set; }
    public string Path { get; set; }
    public long Size { get; set; }
}
我下载文件的方法如下所示

private async Task<File> GetFile(string name, string path = null)
{
    var blockBlob = _container.GetBlockBlobReference(GetKey(name, path));
    await blockBlob.FetchAttributesAsync();

    var memoryStream = new MemoryStream();
    await blockBlob.DownloadToStreamAsync(memoryStream).ConfigureAwait(false);
    memoryStream.Position = 0;

    return new File(
        name: name,
        path: path: blockBlob.Uri.ToString(),
        data: memoryStream,
        size: blockBlob.Properties.Length);
}
private async Task GetFile(字符串名称,字符串路径=null)
{
var blockBlob=_container.GetBlockBlobReference(GetKey(名称,路径));
等待blockBlob.FetchAttributesAsync();
var memoryStream=新的memoryStream();
wait blockBlob.DownloadToStreamAsync(memoryStream.configurewait(false);
memoryStream.Position=0;
返回新文件(
姓名:姓名,,
path:path:blockBlob.Uri.ToString(),
数据:memoryStream,
大小:blockBlob.Properties.Length);
}

问题:我创建一个memoryStream而从不处理它可以吗?我是否应该将memoryStream作为参数传递给调用方,并将生命周期的责任转移给调用方?如果是,我如何使用mu模型实现这一点

MemoryStream不需要根据文档进行明确的处理(请参见中的注释),因此您当前的设计很好。

不建议让调用方负责管理流(事实上,在您的实现中,您应该将MemoryStream的使用包装在using语句中)-为什么不将数据属性设置为块/文本而不是流(取决于您实际存储的内容)?您的意思是什么?如果应该在调用方使用memorystream,我如何将它包装为using,在其他情况下,它将在GetFile方法中释放。内存流是在非静态方法中创建的,因此它在执行堆栈上创建,并在退出该方法时自动释放。堆栈被弹出,因此所有数据都被销毁。你的意思是说设计一切正常吗?@jdweng你说得对-不需要使用MemoryStream(请参见中的注释)。所以我想代码是可以的