У меня есть класс, использующий TcpClient
, который вращается Thread
, делая while (!streamReader.EndOfStream) {}
на NetworkStream
. Пока TCP-соединение открыто и нет доступных данных для чтения, EndOfStream
будет блокировать выполнение, поэтому мне интересно, что мне следует сделать, чтобы прервать чтение извне потока.
Поскольку EndOfStream
блокирует, установка частного поля с именем stop
в true
сама по себе не принесет много пользы (по крайней мере, в моем тестировании), поэтому я сделал следующее:
// Inside the reading thread:
try
{
StreamReader streamReader = new StreamReader(this.stream);
while (!streamReader.EndOfStream)
{
// Read from the stream
}
}
catch (IOException)
{
// If it isn't us causing the IOException, rethrow
if (!this.stop)
throw;
}
// Outside the thread:
public void Dispose()
{
// Stop. Hammer Time!
this.stop = true;
// Dispose the stream so the StreamReader is aborted by an IOException.
this.stream.Dispose();
}
Это рекомендуемый способ прервать чтение из NetworkStream
или есть какой-то другой метод, который я могу использовать для безопасного (но принудительного) уничтожения всего?