我正在查看一些不是我自己编写的代码,并试图了解导致应用程序崩溃的原因。
我认为这可能归结为它如何处理资源和管理线程。
主父线程创建一个新的应用层客户端(TCPMonitor),然后创建另一个处理 TCP 套接字通信的类(TCPListen)。此类产生一个新的线程循环,该循环创建一个新的 TCP 套接字客户端、该套接字上的读取网络流,然后调用同步阻塞 Read()。
但是,如果发生网络错误连接,则会在 TCPListen 线程循环中捕获异常,并将事件引发回所属类 TCPMonitor。TCPMonitor 然后检查它是否拥有一个活动的 TCPListen 实例,如果是,它调用 Dispose() 并将该实例设置为 Null。
此时 TCPListen Read() 肯定仍处于其阻塞调用中吗?如果是这种情况,我如何确保从父线程调用 Dispose 将使子线程脱离阻塞调用并正确处理流和套接字?