C# Streamreader关闭时冻结

C# Streamreader关闭时冻结,c#,C#,我有一个应用程序,可以根据关键字从Twitter上读取推文。这些关键字可以周期性地更改,当它们更改时,我需要关闭并重新打开流。我可以打开流没有问题,但我有一个问题,当我试图关闭该流。下面是一些示例代码: try { response = (HttpWebResponse)request.GetResponse(); using (Stream stream = response.GetResponseStream()

我有一个应用程序,可以根据关键字从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)机器上运行良好。但是,当我将其部署到Server2008或Server2012(都是x64)时,我看到了这种冻结行为。我在HttpWebRequest上没有设置任何参数,除了twitter需要的头。有人对发生的事情有什么想法吗?

我时不时地碰到这个问题。出于我不完全理解的原因,流希望在接收到所有内容之前保持开放。这对我来说成了一个问题,我会在关闭流之前调用
request.Abort
。例如,在您的代码中,我会写:

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

不久前我在博客上写过这件事:

尝试使用一个
语句:
使用(StreamReader=newstreamreader(response.GetResponseStream())
。我猜问题来自于关闭两次相同的流。什么是计数,它在哪里定义?另外,为什么不将
reader.ReadLine
中的行更改为
reader.ReadToEnd()
@DJKRAZE OP似乎使用了永无止境的方法…哦,那就有道理了..哈哈,我注意到他正在调用
response.Dispose()
我认为最好是调用
response.Close()
或者如果他真的想最终消除
{}
他应该将
响应对象
环绕在
using()上
@caerolus我已经尝试使用1个using语句,结果相同。是的,我正在使用twitter流媒体API。。它连续发送数据。