底层流的命名管道

问题描述 投票:0回答:1

与c#一起使用命名管道时。如果我们使用using语句创建客户端和服务器管道,则将streamReader和streamWriter连接到它。当namedPipe被处置时(在using语句的末尾),streamReader和StreamWriter也会被处置吗?

c# named-pipes
1个回答
1
投票

没有流并不能神奇地跟踪使用它们的每个StreamReaderStreamWriter实例。这对任何流都是如此,而不仅仅是命名管道。

var stream = ...;
var reader = new StreamReader(stream);
stream.Dispose();
// reader is not disposed here

但是,默认情况下,处置StreamReaderStreamWriter处置由其构造的流:

var stream = ...;
using(var reader = new StreamReader(stream))
    // ...
// stream is disposed here

也就是说,除非您通过将true传递给它们的leaveOpen参数(下面是最后一个参数)来构造它们:

var stream = ...;
using(var reader = new StreamReader(stream, encoding, false, 4096, true))
    // ...
// stream is not disposed here

换句话说,默认情况下,读者或作家own他们的流,这意味着当他们自己关闭时,他们有责任关闭他们。不拥有流的读取器和写入器仅在被处理时才刷新其内部缓冲区,而使流保持不变。

© www.soinside.com 2019 - 2024. All rights reserved.