我有一个应用程序,可以根据关键字从Twitter读取推文。这些关键字可以定期更改,当它们执行时,我需要关闭并重新打开流。我能够打开流没问题,但是当我试图关闭该流时,我遇到了问题。以下是一些示例代码:
try
{
response = (HttpWebResponse)request.GetResponse();
using (Stream stream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(stream))
{
WriteLogMessage("Stream open - entering loop");
while (true)
{
if (count == 10) break;
count++;
string tweet = reader.ReadLine();
Console.Write(tweet);
}
WriteLogMessage("Exited loop");
}
/**** Program seems to freeze and never gets past this point ****/
WriteLogMessage("Reader disposed");
}
WriteLogMessage("Stream disposed");
}
catch (Exception ex)
{
WriteLogMessage(ex.Message);
}
finally
{
if (response != null)
response.Dispose();
WriteLogMessage("Response closed");
}
此代码在我的win7(x64)计算机上正常运行。但是,当我将它部署到服务器2008或服务器2012(都是x64)时,我看到了这种冻结行为。除了twitter需要的标题之外,我在HttpWebRequest上没有设置任何参数。任何人都对最新情况有什么想法?
答案 0 :(得分:2)
我不时遇到这种情况。由于我不完全理解的原因,该流想要保持开放,直到它收到所有内容。这对我来说是个问题,我在关闭流之前会调用request.Abort
。例如,在你的代码中,我会写:
WriteLogMessage("Exited loop");
request.Abort();
}
我在一段时间后发表过博文:http://www.informit.com/blogs/blog.aspx?uk=The-hanging-web-request