嗨大家即时通讯尝试创建一个方法,将始终返回一个网址源,如果例如互联网熄灭它将继续工作,直到它出现并返回网址源等等,如果还有其他东西发生。到目前为止在我的方法,当我“关闭”互联网和“打开它”回程序继续正常,但我有一个问题时发生超时,我在一个循环中“下降”我知道while(true)是不是正确的做法,但即时通讯用于我的测试。Webrequest不能“逃生”超时
那么如何跳过超时异常并“重试”我的方法?
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();成为芬兰条款,但它没有帮助。
编辑:控制台每14秒写一次这条消息,因为我的超时时间我认为它与此相关。
你目前的方法有什么问题?你的超时会导致一个异常,并且你循环回来? – CathalMF
@CathalMF我不知道,但第一次超时后,似乎是在一个循环。它就像之后的那样永远处于超时状态。 – Incognito
你确定它不是你的服务器端正在破坏导致超时循环吗? – CathalMF