来自WebResponse.GetResponseStream()
的线程安全流被传递到另一个线程,该线程将stream
读取到结尾并Close()
。 stream.synchronized()
用于流线程安全:
// Thread A
HttpWebResponse response = request.GetResponse();
return Stream.Synchronized(response.GetResponseStream());
// Thread B
// Read the stream to the end
stream.Close(); // Here thread doesn't get back
线程B受另一个线程的控制,该线程不是该问题的主题(线程C)。关于线程C的唯一事情是如果线程B没有正确退出它将Abort()
线程B.问题是线程B冻结在stream.Close()
并且它总是被线程C中止。无论超时(等待句柄)使用超时)我设置,线程B不会通过该行,在超时期间CPU是100%
我做错了什么?
答案 0 :(得分:0)
建议从TCP/View之类的东西开始查找底层流的状态 - 另一端是不允许它干净地清理?或者您是否需要设置套接字选项以更快地关闭?
解决方法可能是允许Close
在线程池中发生,或允许GC将未关闭的流放入终结队列。
答案 1 :(得分:0)
如果没有其他帮助,请尝试在request.Abort()
之前致电stream.Close()
。