如果我在关联的网络流上TcpClient
调用了异步,则使用 .NET我仍然可以在另一个线程上调用该流吗?BeginRead()
Write()
还是我必须lock()
在TcpClient
从 回调BeginRead
的代码和发送的代码中?
另外,如果我关闭TcpClient
:
client.GetStream().Close();
client.Close();
我也必须这样lock()
做TcpClient
吗?
如果我在关联的网络流上TcpClient
调用了异步,则使用 .NET我仍然可以在另一个线程上调用该流吗?BeginRead()
Write()
还是我必须lock()
在TcpClient
从 回调BeginRead
的代码和发送的代码中?
另外,如果我关闭TcpClient
:
client.GetStream().Close();
client.Close();
我也必须这样lock()
做TcpClient
吗?
的读/写部分TcpClient
是线程安全的,如该类的文档中所述NetworkStream
(这是TcpClient
其实际 IO 的用途):
可以在 NetworkStream 类的实例上同时执行读取和写入操作,而无需同步。只要写操作有一个唯一线程,读操作有一个唯一线程,读写线程之间就不会相互干扰,也不需要同步。
对于关闭,如果您关闭TcpClient
一个线程,但在关闭后尝试在另一个线程上使用它进行读/写,则会引发异常。您可以在线程关闭之前同步线程以防止它们使用TcpClient
,或者只是捕获并处理异常(例如,您可能会退出线程的执行循环)。