正确关闭函数返回的Stream / StreamReader实例

时间:2013-06-10 08:33:55

标签: c# .net stream .net-2.0

我正在重构一些代码并找到以下函数:

public static StreamReader DoWebRequest(string url, string method)
{
    HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
    req.Method = method;
    req.Timeout = System.Threading.Timeout.Infinite;
    HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
    return new StreamReader(resp.GetResponseStream());
}

以后

string result = Helper.DoWebRequest(ServerUrl, "GET").ReadToEnd();

我已经使用了很多流,并且始终放置HttpWebResponse resp = req.GetResponse()并且还将读者流入使用块。但是在这个特殊情况下我应该怎么做呢?以上代码是否正常或者最好将StreamReader分配给新变量,并在调用ReadToEnd()之后明确地将其关闭; (或使用块内)像这样:

using(StreamReader sr = Helper.DoWebRequest(ServerUrl, "GET"))
{
  string result = sr.ReadToEnd();
}

由于

1 个答案:

答案 0 :(得分:1)

好吧,你总是可以写另一个兼具两者的功能:

public static String ReadToEndAndClose(this StreamReader stream)
{
    using(var sr = stream)
    {
        return sr.ReadToEnd();
    }
}