Webページから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