gpt4 book ai didi

c# - 如何关闭包含对 NetworkStream.Read 的阻塞调用的线程

转载 作者:行者123 更新时间:2023-11-30 12:13:03 25 4
gpt4 key购买 nike

我正在查看一些不是我自己编写的代码,我试图了解导致应用程序崩溃的原因。

我认为这可能归结为它如何处理资源和管理线程。

主父线程创建一个新的应用层客户端 (TCPMonitor),然后创建另一个类来处理 TCP 套接字通信 (TCPListen)。此类生成一个新的线程循环,该循环创建一个新的 TCP 套接字客户端、该套接字上的读取网络流,然后调用同步阻塞 Read()。

但是,如果发生网络错误连接,异常会在 TCPListen 线程循环中被捕获,并且事件会返回到所属类 TCPMonitor。然后 TCPMonitor 检查它是否拥有事件的 TCPListen 实例,如果是,它调用 Dispose() 并将该实例设置为 Null。

此时 TCPListen Read() 肯定仍处于阻塞调用中?如果是这样,我如何确保从父线程调用 Dispose 将使子线程脱离阻塞调用并正确处理流和套接字?

最佳答案

关闭输入套接字。这将取消阻止读取并使其获得 EOS 指示,无论 API 中采用何种形式。正如您在 Windows 上一样,如果它继续发送,它也会导致另一端获得连接休息。 (此行为取决于平台。)

关于c# - 如何关闭包含对 NetworkStream.Read 的阻塞调用的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12384730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com