背景/简介:
非常奇怪的问题,在抛出特定异常时,似乎所有其他线程都停止执行,直到处理异常为止.该应用程序是一个代理服务器,通过一个tcp套接字池连接多个请求(在任何一个时间范围内数百个),它通过socks连接连接到N个其他代理客户端.通过传递委托而不是使用异常,尝试使用相同的不良性能结果.
正常操作下的日志片段:
14:40:17.700 [PrxSvc:9058] --> [200] 1217ms http://redact.example.com
14:40:17.700 [PrxSvc:9058] C-DEBUG:C
14:40:17.716 [PrxSvc:9058] --> [200] 1098ms http://redact.example.com
14:40:17.716 [PrxSvc:9058] C-DEBUG:C
14:40:17.727 [PrxSvc:9054] --> [200] 905ms http://redact.example.com
14:40:17.727 [PrxSvc:9054] C-DEBUG:C
14:40:17.778 [PrxSvc:9050] --> [200] 453ms http://redact.example.com
14:40:17.778 [PrxSvc:9050] C-DEBUG:C
14:40:17.781 [Unnamed Thread] C-DEBUG:A
14:40:17.781 [Unnamed Thread] C-DEBUG:B
14:40:17.796 [PrxSvc:9058] --> [200] 652ms http://redact.example.com
14:40:17.796 [PrxSvc:9058] C-DEBUG:C
14:40:17.807 [PrxSvc:9056] --> [200] 1555ms http://redact.example.com
14:40:17.807 [PrxSvc:9056] C-DEBUG:C
14:40:17.816 [PrxSvc:9064] --> [200] 396ms http://redact.example.com
Run Code Online (Sandbox Code Playgroud)
套接字池重用与域的连接,但是当外部服务器关闭连接时,我们显然没有收到任何通知.当我们尝试通过TcpSocksHandler.TaskHandler方法重用此连接时:
socks.Send(buffer, 0, rcv, SocketFlags.None);
socks.Receive(new byte[1], 0, 1, …Run Code Online (Sandbox Code Playgroud)