在C#中如何使用WebClient.DownloadStringTaskAsync方法设置超时?

时间:2018-09-21 22:04:17

标签: c# async-await webclient

现在我正在使用HttpWebRequest.BeginGetResponse方法进行http调用,我想将代码迁移到异步等待模型。因此,尽管使用了WebClient.DownloadStringTaskAsync方法,但不确定如何设置超时时间?

1 个答案:

答案 0 :(得分:1)

WebClient的默认超时为100秒(我相信)

  • 如果您愿意,CancelAsync()可以自己设置超时时间,则加入胡椒粉和盐调味。

  • 您使用HttpWebRequest而不是WebClient(内部使用HttpWebRequest)。使用HttpWebRequest将允许您隐式设置超时。

  • 您可以制作一个派生类,该类设置WebRequest的超时时间,如从此答案中看到的那样

Set timeout for webClient.DownloadFile()

public class WebDownload : WebClient
{
    /// <summary>
    /// Time in milliseconds
    /// </summary>
    public int Timeout { get; set; }

    public WebDownload() : this(60000) { }

    public WebDownload(int timeout)
    {
        this.Timeout = timeout;
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address);
        if (request != null)
        {
            request.Timeout = this.Timeout;
        }
        return request;
    }
}