首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TcpClient BeginRead/Send线程安全吗?

TcpClient BeginRead/Send线程安全吗?
EN

Stack Overflow用户
提问于 2010-04-06 15:22:39
回答 1查看 6.5K关注 0票数 7

使用.NET TcpClient如果我已经在关联的网络流上调用了异步BeginRead(),我还能在另一个线程上调用该流上的Write()吗?

或者,我是否必须在从BeginRead回调的代码和执行发送的代码中lock() TcpClient

另外,如果我用以下命令关闭TcpClient

代码语言:javascript
复制
client.GetStream().Close();
client.Close();

我也必须在TcpClient上使用lock()吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-06 15:52:15

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

可以在NetworkStream类的实例上同时执行

读写操作,而无需同步。只要有一个用于写操作的唯一线程和一个用于读操作的唯一线程,读和写线程之间就不会有交叉干扰,也不需要同步。

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2583269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档