Web错误超时的异步Web请求

时间:2015-10-30 06:15:46

标签: c# httpwebrequest webrequest

我整天都在这。我正在使用

创建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的内容,同时仍然可以在五秒钟之后将请求发送出去?

1 个答案:

答案 0 :(得分:0)

在我的研究中,我发现这是一个重复的问题(抱歉,我不知道这是如何工作的)

Timeout behaviour in HttpWebRequest.GetResponse() vs GetResponseAsync()

  

超时不适用于异步HttpWebRequest请求。至   引用文档:

     

Timeout属性对异步请求没有影响

     

我建议你改用HttpClient,它是用来设计的   记住异步请求。   -Stephen Cleary