使用.NET TcpClient如果我已经在关联的网络流上调用了异步BeginRead(),我还能在另一个线程上调用该流上的Write()吗?
或者,我是否必须在从BeginRead回调的代码和执行发送的代码中lock() TcpClient?
另外,如果我用以下命令关闭TcpClient:
client.GetStream().Close();
client.Close();我也必须在TcpClient上使用lock()吗?
发布于 2010-04-06 15:52:15
TcpClient的读/写部分是线程安全的,如NetworkStream类的文档所述(这是TcpClient用于其实际IO的类):
可以在NetworkStream类的实例上同时执行
读写操作,而无需同步。只要有一个用于写操作的唯一线程和一个用于读操作的唯一线程,读和写线程之间就不会有交叉干扰,也不需要同步。
对于关闭,如果您在一个线程上关闭TcpClient,但在它关闭后尝试在另一个线程上使用它进行读/写,则将抛出异常。您可以在线程关闭之前同步线程,以防止它们使用TcpClient,或者只捕获并处理异常(例如,您可以退出线程的执行循环)。
https://stackoverflow.com/questions/2583269
复制相似问题