c# - 从方法返回 Lazy<Stream> 是否是推迟打开 FileStream 的成本的好主意?

标签 c# file-io lazy-evaluation

<分区>

我有一个场景,我想清楚地传达调用者有责任处理流,同时防止调用者发现底层文件的路径——调用者不应该知道流来自文件系统。此外,调用者稍后才需要流,因此我可能不需要立即打开它。

鉴于此,我认为为此目的利用 Lazy 可能是个好主意,如:

public Lazy<Stream> GetContent(string key)
{
    string path = GetFilePath(key);
    return new Lazy(() => File.OpenRead(path));
}

我是不是想多了?我应该只返回一个 Stream 吗?

最佳答案

请注意返回 Lazy<T>这样意味着如果多段代码重复使用同一个惰性“工厂”,那么它们将得到完全相同的流。例如,如果一段代码处理流,那么其他代码将尝试使用相同的处理流等。

如果您真的需要推迟流的创建,那么我建议返回 Func<T>反而。这将允许安全地共享和重新使用返回的委托(delegate),每次调用它时都会创建一个新的流实例。

我自己的偏好可能是只返回一个普通的 Stream ,并且非常清楚地记录处理处置是调用者的责任。

关于c# - 从方法返回 Lazy<Stream> 是否是推迟打开 FileStream 的成本的好主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5306263/

相关文章:

c# - PrintPage PrintPageEventHandler 正在打印太多副本

C - 读取文件的一部分

c# - 如何在 C# 中设置输出文件,仅当调试标志 = true 时才启用?

list - Ocaml列表: Implement append and map functions

spring - 如何不允许从跨国方法之外延迟加载?

c# - 用户可见的 protected 成员

c# - 查看 ItemsControl 内的注入(inject)

c# - 在 ASP.NET MVC 3 中,什么是 filterContext.IsChildAction?

java - BufferedReader.ready() 方法是否确保 readLine() 方法不返回 NULL?

performance - Haskell:生成组合的技术比较