1

我有一个应用程序可以根据关键字从 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 上设置任何参数。有人对发生的事情有任何想法吗?

4

1 回答 1

2

我不时遇到这种情况。由于我不完全理解的原因,流希望保持打开状态,直到它收到所有内容。这对我来说成了一个问题,我会request.Abort在关闭流之前打电话。例如,在您的代码中,我会写:

    WriteLogMessage("Exited loop");
    request.Abort();
}

前段时间我在博客上写过:http: //www.informit.com/blogs/blog.aspx? uk=The-hanging-web-request

于 2013-03-28T22:51:37.413 回答