我整天都在这。我正在使用
创建Web请求public async static Task<string> FetchString(string Url)
{
HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(Url);
Request.Proxy = null;
WebResponse Response = await Request.GetResponseAsync();
Stream DataStream = Response.GetResponseStream();
if (DataStream == null) return String.Empty;
StreamReader DataReader = new StreamReader(DataStream);
return await DataReader.ReadToEndAsync();
}
效果很好。但问题是,有时它会挂起HTTP 504,网关超时。使用Request.Timeout(或三个变体中的任何一个)不会为我的方法在504上挂起时的方法计时(编辑:超时不回复异步方法,很棒)。为了解决这个问题,我试图创建一个计时器来杀死运行请求的线程,但没有运气这样做,尽管它感觉像是一个有效的概念。
我如何能够以字符串形式异步获取URL的内容,同时仍然可以在五秒钟之后将请求发送出去?
答案 0 :(得分:0)
在我的研究中,我发现这是一个重复的问题(抱歉,我不知道这是如何工作的)
Timeout behaviour in HttpWebRequest.GetResponse() vs GetResponseAsync()
超时不适用于异步HttpWebRequest请求。至 引用文档:
Timeout属性对异步请求没有影响
我建议你改用HttpClient,它是用来设计的 记住异步请求。 -Stephen Cleary