Parallel.ForEach和httpClient.GetAsync抛出AggregateException(InnerException:"一个任务被取消")

时间:2016-08-05 13:10:31

标签: c# vb.net httpclient

我使用Parallel.ForEach执行大约2200个请求(httpClient.GetAsync),这样我就可以更快地获得所需的数据。虽然有时候这个过程通常会毫无例外地通过,但我最终会遇到AggregateException(InnerException:"一个任务被取消")。

未调用Cancel(),我使用的是默认请求Timeout。

有建议删除HttpClient创建的使用并使用它的单个实例,但它没有帮助。

任何想法导致异常的原因以及如何预防异常?

    public void GetData()
    {
       ConcurrentBag<MyItem> alltems = new ConcurrentBag<MyItem>();

       Parallel.For(0, listOfUrls, url =>
        {
           allItems.Add(MyMethod(this.Get(url));
        }
    }

    public HttpResponseMessage Get(string url)
    {
        httpClient = NewHttpClient();
        {
            var requestContent = httpClient.GetAsync(this.siteUrl + "/" + url).Result;
            return requestContent;
        }
    }

    HttpClient cachedHttpClient;
    private HttpClient NewHttpClient(bool skipAuthorization = false)
    {
        var h = new WebRequestHandler();

        if (cachedHttpClient == null)
        {
            var client = new HttpClient(h);
            if (!skipAuthorization)
            {
                client.DefaultRequestHeaders.Add("Authorization", "WRAP access_token=" + accessToken);
            }
            return client;
        }
        else
        {
            return cachedHttpClient;
        }
    }

0 个答案:

没有答案