我使用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;
}
}