7

如果我在关联的网络流上TcpClient调用了异步,则使用 .NET我仍然可以在另一个线程上调用该流吗?BeginRead()Write()

还是我必须lock()TcpClient从 回调BeginRead的代码和发送的代码中?

另外,如果我关闭TcpClient

client.GetStream().Close();
client.Close();

我也必须这样lock()TcpClient吗?

4

1 回答 1

9

的读/写部分TcpClient是线程安全的,如该类的文档中所述NetworkStream(这是TcpClient其实际 IO 的用途):

可以在 NetworkStream 类的实例上同时执行读取和写入操作,而无需同步。只要写操作有一个唯一线程,读操作有一个唯一线程,读写线程之间就不会相互干扰,也不需要同步。

对于关闭,如果您关闭TcpClient一个线程,但在关闭后尝试在另一个线程上使用它进行读/写,则会引发异常。您可以在线程关闭之前同步线程以防止它们使用TcpClient,或者只是捕获并处理异常(例如,您可能会退出线程的执行循环)。

于 2010-04-06T07:52:14.597 回答