《 .NET并发编程实战》实战习题集 - 4 - 如何重用一次性资源

如何重用以下一次性资源代码呢?

string text;

using (var stream = new StreamReader(path))

{

    text = stream.ReadToEnd();

}

这时以传统的OOP风格来重构代码并不是一件容易的事。是可以使用模板方法模式来解决这个问题,但是该解决方案还会带来更多的复杂性,因为它需要新的基类和每个派生类的实现。更好、更优雅的解决方案是函数式编程, 即使用lambda表达式(匿名委托)。以下是实现静态辅助方法及其用法的代码:

R Using<T,R>(this T item, Func<T, R> func) where T : IDisposable { using (item)

return func(item);

string text = new StreamReader(path).Using(stream => stream.ReadToEnd());

以上代码实现了一种灵活且可重用的模式,以用于清理一次性资源。这里唯一的约束就是泛型类型T必须是实现IDisposable的类型。

扫描二维码关注公众号,回复: 7331550 查看本文章

猜你喜欢

转载自www.cnblogs.com/adalovelacer/p/book-concurrency-in-dot-net-chinese-version-practice-4.html
今日推荐