我试图从网页下载 html,但我想在 10 秒后放弃。下面的代码可以很好地下载文本,但可能需要超过 10 秒。我设置了超时,但 StreamReading 需要很长时间。在 10 秒后停止任何进一步处理同时仍关闭连接的最佳方法是什么?
如果 req.GetResponse() 花费的时间超过 10 秒,我会收到一个 WebException,但是 wr.GetResponseStream() 读取是需要时间的。我还想确保所有连接都正确关闭。
代码:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Timeout = 10000;
req.ReadWriteTimeout = 10000;
using (WebResponse wr = req.GetResponse())
{
Console.WriteLine("A: " + DateTime.Now.ToString(" HH:mm:ss:fff"));
using (StreamReader sr = new StreamReader(wr.GetResponseStream(), true))
{
Console.WriteLine("B: " + DateTime.Now.ToString(" HH:mm:ss:fff"));
var b = sr.ReadToEnd();
Console.WriteLine("C: " + DateTime.Now.ToString(" HH:mm:ss:fff"));
}
}
样本输出:
A: 20:04:36:522
B: 20:04:36:522
C: 20:04:54:337
Elapsed Time: ~18 Seconds