我正在重构一些代码并找到以下函数:
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();
}
由于
答案 0 :(得分:1)
好吧,你总是可以写另一个兼具两者的功能:
public static String ReadToEndAndClose(this StreamReader stream)
{
using(var sr = stream)
{
return sr.ReadToEnd();
}
}