加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 从任务中的异步HttpWebRequest调用捕获异常

发布时间:2020-12-15 04:14:46 所属栏目:百科 来源:网络整理
导读:我如何在下面的方法中捕获异常? private static Taskstring MakeAsyncRequest(string url) { if (!url.Contains("http")) url = "http://" + url; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.UserAgent = "Mozilla/4.0 (co
我如何在下面的方法中捕获异常?
private static Task<string> MakeAsyncRequest(string url)
    {
        if (!url.Contains("http"))
            url = "http://" + url;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
        request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        request.Method = "GET";
        request.KeepAlive = false;
        request.ProtocolVersion = HttpVersion.Version10;

        Task<WebResponse> task = Task.Factory.FromAsync(
        request.BeginGetResponse,asyncResult => request.EndGetResponse(asyncResult),(object)null);

        return task.ContinueWith(t => FinishWebRequest(t.Result));

    }

我得到404,403等错误的具体地点是:

Task<WebResponse> task = Task.Factory.FromAsync(
            request.BeginGetResponse,(object)null);

我无法弄清楚如何处理它们

解决方法

您的错误可能发生在您的委托调用request.EndGetResponse(asyncResult)中.

但是您可以使用以下命令创建任务:

Task<WebResponse> task = Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse,request.EndGetResponse,null);

这应该传播任务的任何例外.

您可以在ContinueWith委托中检查错误:

return task.ContinueWith(t =>
{
    if (t.IsFaulted)
    {
        //handle error
        Exception firstException = t.Exception.InnerExceptions.First();
    }
    else
    {
        return FinishWebRequest(t.Result);
    }
});

或者,如果您使用的是C#5,则可以使用async / await创建MakeAsyncRequest.这将为您从AggregateException中解除异常:

private static async Task<string> MakeAsyncRequest(string url)
{
    if (!url.Contains("http"))
        url = "http://" + url;

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
    request.Accept = "text/html,*/*;q=0.8";
    request.Method = "GET";
    request.KeepAlive = false;
    request.ProtocolVersion = HttpVersion.Version10;

    Task<WebResponse> task = Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse,null);
    WebResponse response = await task;
    return FinishWebRequest(response);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读