【发布时间】:2014-08-06 17:20:47
【问题描述】:
我有一个 SslStream 对象,它在单独线程中运行的无限循环中调用 ReadByte 方法:
private String GetResponse()
{
var serverResponse = new StringBuilder();
while (true)
{
int byteFromStream = _sslStream.ReadByte();
if (byteFromStream != -1)
{
serverResponse.Append((char)byteFromStream);
try
{
JContainer.Parse(serverResponse.ToString());
break;
}
catch { }
}
}
return serverResponse.ToString();
}
终止此类线程的最佳方法是什么?我无法在中断点之后设置任何超时,因为我真的不知道我应该等待下一个数据多长时间。
提前致谢。
【问题讨论】:
-
你可以设置一个超时时间,如果标志没有设置退出就循环回来。
-
不清楚。终止的条件是什么?
-
@Henk Holterman 例如,如果 Disconnect 方法被调用或在 Dispose 方法和析构函数中,我需要终止这个线程
-
关闭流。你会得到一个 ObjectDisposedException,一定要抓住它并迅速离开。
-
我不知道同时拨打
Read和Close是否安全。从技术上讲,我认为这不是因为文档说实例方法不是线程安全的。但是,您可以更改代码以使用BeginRead而不是Read。如果您随后调用了Close,它将不会与BeginRead同时执行(因为该调用将立即返回)。只要确保你真的不会同时给他们打电话。使用lock之类的。
标签: c# multithreading networking