我正在使用TPL来爬取一组URL并进行一些处理。
for (int i = 0; i < list.Count; i++)
{
var tuple = list[i];
string url = tuple.Item2;
tasks[i] = httpClient.GetStringAsync(url).
ContinueWith(task => {
{
......
});
}
Task.WaitAll(tasks);
问题是,在Task.WaitAll
语句处,通常会因为任务被取消而抛出异常。我理解httpClient.GetStringAsync
并不总是保证成功,所以我想在异常发生时在httpClient.GetStringAsync
中添加重试逻辑。如何正确地处理这个问题呢?
async-await
构建的await Task.WhenAll
,那么你将会得到其中的实际异常(第一个异常)。 - i3arnonTask.WhenAll (...).GetAwaiter().GetResult()
。 - i3arnon