【发布时间】:2014-05-28 16:22:44
【问题描述】:
大家好,我正在尝试创建一个始终返回 url 源的方法,例如,如果互联网关闭,它将继续工作,直到它出现并返回 url 源等等,如果发生其他事情。到目前为止,在我的方法中,当我“关闭”互联网并“打开”后程序正常继续但是当发生超时并且我“陷入”循环时我遇到了问题我知道while(true) 不是正确的方法,但我将它用于我的测试。
那么我怎样才能跳过超时异常并“重试”我的方法呢?
public static async Task<string> GetUrlSource(string url)
{
string source = "";
while (true)
{
HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(url);
hwr.AllowAutoRedirect = true;
hwr.UserAgent = UserAgent;
hwr.Headers.Add(hd_ac_lang[0], hd_ac_lang[1]);
hwr.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
hwr.Timeout = 14000;
try
{
using (var response = hwr.GetResponse())
{
using (var reader = new StreamReader(response.GetResponseStream()))
{
source = await reader.ReadToEndAsync();
if (check_source(source))
{
return source;
}
}
}
}
catch (WebException ex)
{
hwr.Abort();
if (ex.Status == WebExceptionStatus.ProtocolError)
{
if (((HttpWebResponse)ex.Response).StatusCode == HttatusCode.NotFound)
{
// handle the 404 here
return "404";
}
}
else
{
Console.WriteLine(ex.Status.ToString());
}
}
}
}
注意:我以前有 hwr.Abort();进入一个 finnaly 子句,但它没有帮助。
编辑:控制台每 14 秒写一次此消息,因为我的超时我认为这与此有关。
【问题讨论】:
-
您当前的方法有什么问题?您的超时导致异常并且您循环回来?
-
@CathalMF 我也不知道,但是在第一次超时之后,它似乎陷入了循环。它就像 hwr 之后它永远处于超时状态。
-
您确定不是您的服务器端导致超时循环中断?
-
实际上我在本地运行这个应用程序,事实是我遇到了一些互联网问题,但尽管如此,如果我同时重新启动应用程序,它会正常运行。顺便说一句,异常每 14 秒运行一次,所以它不会释放一些资源或类似的东西。
标签: c# timeout httpwebrequest webrequest internet-connection