C# TcpClient BeginRead/Send线程是否安全?

C# TcpClient BeginRead/Send线程是否安全?,c#,.net,thread-safety,tcpclient,networkstream,C#,.net,Thread Safety,Tcpclient,Networkstream,使用.NETTcpClient如果我在相关联的网络流上调用了异步BeginRead(),那么我仍然可以在另一个线程的该流上调用Write() 或者我必须在从开始调用的代码中锁定tcp客户端,以及执行发送的代码 另外,如果我关闭tcp客户端: client.GetStream().Close(); client.Close(); 我是否也必须对TcpClient进行lock()?TcpClient的读/写部分是线程安全的,如NetworkStream类的文档中所述(这是TcpClient用于其实

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

或者我必须在从
开始
调用的代码中锁定
tcp客户端
,以及执行发送的代码

另外,如果我关闭
tcp客户端

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

我是否也必须对
TcpClient
进行
lock()

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

读写操作可以是 在同一台计算机上同时执行 NetworkStream类的实例 不需要同步。 只要有一个唯一的线程 对于写入操作和一个 读取操作的唯一线程, 不会有交叉干扰 在读线程和写线程之间 需要同步


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

谢谢,我在MSDN my bad中完全错过了这一点-我道歉。在结束时,我正在捕获并处理异常,但只是不确定这是否是不可靠的,因此感谢您澄清这一点,因为据我所知,这没有记录在案。是的,如果您尝试写入/读取已关闭的TcpClient,it抛出异常是完全正常的。您将在所有.NET套接字API中看到这一点。