Именованные каналы, лежащие в основе потока - PullRequest
0 голосов
/ 06 апреля 2020

При использовании именованных каналов с c#. Если мы используем оператор using для создания канала клиента и сервера, то подключаем к нему streamReader и streamWriter. Размещаются ли streamReader и StreamWriter также при удалении namedPipe (в конце оператора using)?

1 Ответ

1 голос
/ 06 апреля 2020

Нет. Потоки волшебным образом не отслеживают каждый экземпляр StreamReader или StreamWriter, который их использует. Это относится к любому потоку, а не только к именованным каналам.

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

Однако по умолчанию удаление StreamReader или StreamWriter удаляет поток, с которым они были построены:

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

Другими словами, по умолчанию читатели или писатели владеют своими потоками, что означает, что они несут ответственность за их закрытие, когда они сами закрыты. Читатели и писатели, которые не владеют своим потоком, при удалении будут только sh свои внутренние буферы, но в противном случае оставят поток без изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...