iam*_*iam 6 .net c# networkstream tcpclient thread-safety
使用.NET,TcpClient
如果我BeginRead()
在关联的网络流上调用异步,我仍然可以Write()
在另一个线程上调用该流吗?
还是我要lock()
的TcpClient
代码被称为从后面BeginRead
和不发送的代码?
如果我关闭了TcpClient
:
client.GetStream().Close();
client.Close();
Run Code Online (Sandbox Code Playgroud)
我一定要lock()
上TcpClient
呢?
读取/写入部分TcpClient
是线程安全的,如NetworkStream
类的文档中所述(这是TcpClient
其实际IO 的用途):
可以在NetworkStream类的实例上同时执行读写操作,而无需同步.只要有一个用于写操作的唯一线程和一个用于读操作的唯一线程,读写线程之间就不会存在交叉干扰,也不需要同步.
要关闭,如果你关闭TcpClient
一个线程,但在关闭后尝试在另一个线程上使用它进行读/写,则会抛出异常.您可以在线程关闭之前同步线程,以防止它们使用TcpClient
,或者只捕获并处理异常(例如,您可以退出线程的执行循环).
归档时间: |
|
查看次数: |
5551 次 |
最近记录: |